我正在尝试使用 mod_mellon 将 SSO 从 IdP 配置到 Apache,并使用 mod proxy 将 SSO 配置到 splunk。
环境:Ubuntu 14.04;Apache 2.4.7;mod-auth-mellon 0.7.0。
Apache 在默认 ssl 站点上配置了 mellon 生成的密钥/证书。mod proxy 用于在端口 8000 上本地代理 splunk。
auth_mellon.conf
:
MellonCacheSize 100
MellonLockFile "/var/lock/mod_auth_mellon.lock"
MellonPostDirectory "/var/cache/apache2/mod_auth_mellon/"
ProxyRequests Off
ProxyPass /secret/ !
ProxyPassInterpolateEnv On
<Location />
MellonEnable "info"
Require valid-user
AuthType "Mellon"
MellonVariable "cookie"
MellonSamlResponseDump On
MellonSPPrivateKeyFile /etc/apache2/mellon/urn_splunk.key
MellonSPCertFile /etc/apache2/mellon/urn_splunk.cert
MellonSPMetadataFile /etc/apache2/mellon/urn_splunk.xml
MellonIdpMetadataFile /etc/apache2/mellon/idp-meta.xml
MellonEndpointPath /secret/endpoint
MellonUser "NAME_ID"
MellonDefaultLoginPath /en-US/
RequestHeader set SplunkWebUser %{MELLON_NAME_ID}e
MellonSamlResponseDump On
ProxyPass http://127.0.0.1:8000/
ProxyPassReverse http://127.0.0.1:8000/
ProxyPassInterpolateEnv On
</Location>
idp-meta.xml
包含来自 IDP 的元数据(包括 IDP x509 证书和 HTTP Post/HTTP 重定向参数)。这些urn_service.*
文件是从mellon_create_metadata.sh
在 SP 和 xml 配置文件上创建 x509 证书和密钥的脚本生成的。
当我尝试从 IdP 访问 splunk 时,我看到 apache 日志文件中的错误,并收到 500 / 内部服务器错误响应:
[authz_core:debug] mod_authz_core.c(802): AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[authz_core:debug] mod_authz_core.c(802): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[core:error] AH00027: No authentication done but request not allowed without authentication for /secret/endpoint/login. Authentication not configured?
似乎 SAML 身份验证失败。我正在遵循以下指南:http://blogs.splunk.com/2013/10/09/splunk-sso-using-saml-through-okta/
Splunk 配置为使用 LDAP 进行身份验证,并且身份验证正确。apache 是否也需要配置 ldap 身份验证来识别有效用户?(不确定 apache/mellon 中用户是如何进行身份验证的,假设这一切都由 IdP 的有效负载处理,而 mellon 只知道身份
答案1
看起来有很多地方都错了。首先,当我修改 SAML 设置时,我没有意识到需要将元数据从我的 IdP 重新复制回 Apache 配置。无论如何,在确保 IdP 和 SP xml 文件在 Apache 中配置正确后,我就可以继续了(我想我已经更改了实体 ID)
我仍然在错误日志中收到有关需要有效用户的错误。事实证明,它MellonEnable "auth"
负责确保存在有效用户,但出于某种原因,Require valid-user
参数AuthType "Mellon"
触发了错误和 500 服务器响应。
删除这 2 个指令后,我仍然收到错误,这一次Could not find metadata for the IdP "(null)"
- 经过快速搜索,发现lasso
Ubuntu 14.04 LTS (2.4.0) 上可用的最新版本不适用于 IdP 默认使用的 SHA256 签名。Lasso 2.5 支持 SHA256。使用兼容算法更新 IdP 配置后,识别就可以正确进行了。
但是,由于上下文的原因,我随后面临重定向循环。我发现另一篇文章建议将 splunk 的 Web 根目录移动到上下文/splunk
而不是根目录 ( /
),通过更新此帖子,我现在能够通过 IdP 的 mellon 向 Splunk 进行身份验证。以下是相关的工作配置:
MellonLockFile "/var/lock/mod_auth_mellon.lock"
MellonPostDirectory "/var/cache/apache2/mod_auth_mellon/"
ProxyRequests Off
ProxyPassInterpolateEnv On
# Move the proxy directives out of <location> and specify the context / mapping
ProxyPass /splunk http://127.0.0.1:8000/splunk
ProxyPassReverse /splunk http://127.0.0.1:8000/splunk
<Location />
MellonEnable "info"
MellonVariable "cookie"
MellonSamlResponseDump On
MellonSPPrivateKeyFile /etc/apache2/mellon/urn_splunkweb.key
MellonSPCertFile /etc/apache2/mellon/urn_splunkweb.cert
MellonSPMetadataFile /etc/apache2/mellon/urn_splunkweb.xml
MellonIdpMetadataFile /etc/apache2/mellon/idp-metadata.xml
MellonEndpointPath /secret/endpoint
MellonUser "NAME_ID"
MellonDefaultLoginPath /splunk/en-US/
RequestHeader set SplunkWebUser %{MELLON_NAME_ID}e
ProxyPassInterpolateEnv On
</Location>
<Location /splunk/>
# Forces /splunk requests to be authenticated via the IdP.
MellonEnable "auth"
</Location>
$SPLUNK_HOME/etc/system/local/web.conf:
[settings]
trustedIP=127.0.0.1
remoteUser SplunkWebUser
SSOMode=permissive
root_endpoint = /splunk
和 $SPLUNK_HOME/etc/system/local/server.conf
[general]
trustedIP=127.0.0.1
这显然是为了设置 apache/mellon 服务器与 splunk 运行在同一台主机上。如果没有,则web.conf
(splunk) 和auth_mellon.conf
(apache) 需要使用远程 IP 进行更新。web.conf
支持以逗号分隔的受信任主机列表,而不server.conf
支持,应保留为本地主机。
答案2
使用以下内容设置调试网页:
<?php
header('Content-Type: text/plain');
foreach($_SERVER as $key=>$value) {
if(substr($key, 0, 7) == 'MELLON_') {
echo($key . '=' . $value . "\r\n");
}
}
?>
你能检查一下用户的 ID 是否在
MellonUser "NAME_ID"
NAME_ID
属性?在我看来这很可疑。通常都是这样的uid
或类似的。在测试阶段,您可以更改为您知道 IdP 发布的任何属性(邮件、cn...等等),只是为了避免 500 问题。
答案3
最有可能的是,IDP 没有正确配置 LDAP,并且 Mellon/Apache 不需要额外的配置。
如果您可以发布 SAML 响应的转储,这将有助于进一步深入研究该问题。
如果您想进一步讨论,请告诉我。
谢谢,Sandy E-[电子邮件保护]