2014-12-16 2 views
0

Shibboleth 세션 속성을 성공적으로 읽고 소비하는 Perl 스크립트를 Node.js로 이식하려고합니다. 펄 코드는 다음과 같은 예를 들어, 같습니다Node.js의 Shibboleth 속성 읽기

die "Must be protected behind shibboleth authentication" unless $ENV{'AUTH_TYPE'} eq 'shibboleth'; 
die "Requires eppn" unless $ENV{'eppn'} ne ""; 
my $user = $ENV{'eppn'}; 
my $shib_session_id = $ENV{'Shib-Session-ID'}; 

표어 속성이 환경 변수로 펄에 사용할 수있는 것처럼 나타납니다. 내가 말할 수있는 한 (나는 Perl을 모르지만)이 값을 가져 오거나 변경하는 것은 스크립트 안에 아무것도 없다.

따라서 Node.js 앱에서 process.env을 확인했는데 이러한 값이 없습니다. Express.js에서 생성 한 요청 객체에는 검색 한 내용이 없습니다.

Perl 스크립트는 Apache 서버에 있지만, httpd.conf의 내용은 Perl 스크립트에 특별한 사항을 전달하는 것처럼 보이지 않습니다. 내 Node.js 응용 프로그램이 동일한 Apache 서버에서 프록시 처리됩니다.

Node.js에서 Shibboleth 속성을 가져올 수 있습니까? 아니면 일부 Perl/Apache/Shibboleth 마법에 의존합니까?

RequestHeader set X-Auth-Type  %{AUTH_TYPE}e 
RequestHeader set X-EPPN   %{eppn}e 
RequestHeader set X-Shib-Session-ID %{Shib-Session-ID}e 

가이 지금 내 Node.js를 응용 프로그램에서 req.headers에 나타납니다;

+1

perl은 아파치에서 실행되기 때문에, 아파치 (common * nix 개념)로부터 환경을 상속받습니다. 참고 사항; $ ENV { 'eppn'} eq ""' –

+0

오른쪽 : 내 Node.js 응용 프로그램이 아파치에서 실행되지 않기 때문에 (단지 $ ENV { 'eppn'} ne ""' RP'd) 환경을 공유하지 않습니다. RP를 사용하는 환경에 환경을 전달할 수있는 방법이 있습니까? – Xophmeister

답변

1

감사합니다 @ mpapec의 의견에, 내가 요청 헤더로 상류 아파치 환경 변수를 전달하여이 문제를 해결 X-Auth-Type은 신비하게도 (null)으로 설정되었지만 당분간은 해결할 수 있습니다. 그러나 이것이 어떤 이유입니까?

+0

n.b. 인증을 업스트림으로 푸시하면 서버에 대한 액세스 권한으로 해당 헤더를 스푸핑 할 수있는 보안 구멍이 열립니다. 상위 애플 리케이션은 방화벽으로 보호 될 수 있지만 아파치 하위 (즉, Perl 스크립트)로 연기하는 것이 더 쉽습니다 (즉, 더 안전합니다). – Xophmeister

+0

nb,'$ ENV { 'AUTH_TYPE'}'등은 CGI 변수이므로, 다운 스트림 서버에서도 사용할 수 있습니다. Shibboleth 환경 변수는 프록시 인증 서버에 의해 설정되므로 아마도 존재하며 다운 스트림으로 보낼 수 있습니다. – Xophmeister

+0

HTTP 헤더 일지라도 노드에 공개되도록하려면 'ShibUseHeaders'를 활성화해야 할 수 있습니다. https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig –