我已使用SAML 2.0设置mod_auth_mellon进行外部身份验证。我使用外部IdP进行身份验证,但是mod_auth_mellon没有填充环境变量,我无法获得用户名来继续授权我想要保护的资源。
工作流程如下: 1)用户尝试访问/test/info.php 2)用户被重定向到外部IdP 3)用户对外部IdP进行身份验证,并重定向到/auth/info.php
我的mellon配置如下:
<Location />
MellonSPPrivateKeyFile /etc/apache2/mellon-config/http_ec2_54_86_69_246.compute_1.amazonaws.com.key
MellonSPCertFile /etc/apache2/mellon-config/http_ec2_54_86_69_246.compute_1.amazonaws.com.cert
MellonSPMetadataFile /etc/apache2/mellon-config/http_ec2_54_86_69_246.compute_1.amazonaws.com.xml
</Location>
<Location /auth/info.php>
MellonEnable "info"
MellonSetEnv "email" "email"
MellonSetEnv "username" "username"
MellonUser "email"
MellonSamlResponseDump On
MellonSessionDump On
MellonVariable "cookie"
</Location>
<Location /test/info.php>
# This location will trigger an authentication request to the IdP.
MellonEnable "auth"
AuthType "Mellon"
MellonVariable "cookie"
MellonSetEnv "email" "email"
MellonSetEnv "username" "username"
MellonUser "email"
MellonSamlResponseDump On
MellonSessionDump On
MellonEndpointPath /mellon
Require valid-user
</Location>
在auth / info.php中,我尝试打印$ SERVER变量:
<?php
var_dump($_SERVER);
?>
我正在获取一个mellon-cookie,但我无处可以看到我设置的环境变量的值。
我缺少什么配置?
答案 0 :(得分:1)
我有这个问题使用apache作为我希望受mod_auth_mellon保护的应用程序的反向代理。看来apache并没有自动传递内部模块生成的头文件。我必须启用mod_headers并添加:
RequestHeader set Mellon-NameID %{MELLON_NAME_ID}e
这将获取MELLON_NAME_ID标头并将其作为Mellon-NameID传递给应用程序。您必须为要传递的每个标题添加类似的行,例如MELLON_SESSION。
答案 1 :(得分:0)
感谢Crunge的回复
对我来说,它适用于以下行(标头而不是RequestHeader)以及httpd conf文件的<Location>
部分中
Header set Mellon-NameID: %{MELLON_NAME_ID}e
(需要重新加载apache服务)