2014-12-16 5 views
0

Я пытаюсь перенести скрипт Perl, который успешно читает и использует атрибуты сеанса Shibboleth, в Node.js. Код Perl выглядит, например, так:Чтение атрибутов Shibboleth в Node.js

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, как переменные окружения. Насколько я могу судить (я не знаю Perl), внутри скрипта нет ничего, что бы извлекало или изменяло эти значения.

Итак, я проверил process.env, в приложении Node.js, и ни одно из этих значений не существует. Кроме того, они, насколько я искал, не существуют в объекте запроса, созданном Express.js.

Perl-скрипт находится на сервере Apache, но ничего в httpd.conf не похоже на то, что он передает что-то особенное для скрипта Perl. Приложение Node.js обращено на прокси-сервер на одном сервере Apache.

Можно ли получить атрибуты Shibboleth в Node.js или опираться на некоторую магию Perl/Apache/Shibboleth?

+1

Поскольку perl работает под apache, он наследует среду от apache (общая концепция * nix). Примечание; должен комментировать 'if $ ENV {'eppn'} ne" "' => 'if $ ENV {'eppn'} eq" "' –

+0

Справа: Так как приложение Node.js не запускается под Apache (это просто RP'd), он не разделяет окружающую среду. Есть ли способ передать среду приложениям RP'd? – Xophmeister

ответ

1

Благодаря @ mpapec замечания, я решил, передав переменные окружения Apache вверх по течению заголовков запроса:

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

Теперь они появляются в req.headers в моем приложении Node.js; хотя X-Auth-Type загадочно настроен на (null) ... Я могу обойти это, пока, но любые идеи, почему это так?

+0

n.b., Push-аутентификация вверх по потоку открывает отверстие безопасности, так как можно просто обмануть эти заголовки, учитывая доступ к серверу. Приложение вверх по течению может быть защищено брандмауэром, но проще (тем самым, безопаснее) просто отложить до ребенка Apache (то есть сценарий Perl) – Xophmeister

+0

nb, '$ ENV {'AUTH_TYPE'}' и другие - переменные CGI, поэтому, вероятно, t даже доступно для нисходящего сервера; переменные среды Shibboleth предположительно устанавливаются сервером аутентификации прокси, поэтому они * делают * существуют и могут быть отправлены вниз по течению. – Xophmeister

+0

«Возможно, для ShibUseHeaders» они должны быть открыты для узла (хотя это и HTTP-заголовки) https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig –