我正在尝试将成功读取和使用Shibboleth会话属性的Perl脚本移植到Node.js.例如,Perl代码看起来像这样:
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'};
似乎Shibboleth属性可用作Perl作为环境变量。据我所知(我不知道Perl),脚本中没有任何东西可以获取或改变这些值。
所以,我在我的Node.js应用程序中检查了process.env
,并且这些值都不存在。据我所知,它们也不存在于Express.js创建的请求对象中。
Perl脚本位于Apache服务器上,但httpd.conf
中的任何内容都不会向Perl脚本传递任何特殊内容。我的Node.js应用程序在同一个Apache服务器上反向代理。
是否有可能在Node.js中获取Shibboleth属性,或者它是否依赖于某些Perl / Apache / Shibboleth魔法?
答案 0 :(得分: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
这些现在出现在我的Node.js应用中的req.headers
中;虽然X-Auth-Type
被神秘地设置为(null)
...我暂时可以解决这个问题,但是为什么会这样呢?