使用Apache mod_mellon从IdP Splunk SAML SSO失败

我试图configurationSSO从一个IdP到Apache与mod_mellon和mod代理splunk。

环境:Ubuntu 14.04; Apache 2.4.7; mod-auth-mellon 0.7.0。

Apacheconfiguration了默认的ssl站点上的mellon生成的密钥/证书。 正在使用mod代理来代理本地端口8000。

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 / HTTPredirect参数)。 urn_service.*文件是从mellon_create_metadata.sh脚本生成的,该脚本在SP和xmlconfiguration文件上创build一个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身份validation失败。 我正在遵循这个指南: http : //blogs.splunk.com/2013/10/09/splunk-sso-using-saml-through-okta/

Splunkconfiguration为使用LDAP进行身份validation,并进行正确的身份validation。 apache是​​否也需要configurationldap身份validation来识别有效用户? (不知道用户是如何在apache / mellon中进行身份validation的,假设这些都是由IdP的负载处理的,而mellon只是知道身份

看起来好像有些事情是错的。 首先,我没有意识到,当我修改SAML设置时,需要从我的IdP重新拷贝元数据到apacheconfiguration。 无论如何,在确保IdP和SP xml文件在Apache中正确configuration后,我能够继续前进(我想我已经更改了实体ID)

我仍然遇到错误日志中需要有效用户的错误。 事实certificate, MellonEnable "auth"负责确保有一个有效的用户,而由于某种原因, Require valid-userAuthType "Mellon"参数触发错误和500服务器响应。

删除这两个指令后,我仍然得到错误,这次Could not find metadata for the IdP "(null)" – 经过快速search,事实certificate,在Ubuntu 14.04 LTS(2.4.0)上可用的最新版本的lasso不符合IdP默认的SHA256签名。 套索2.5支持SHA256。 在使用兼容algorithm更新IdPconfiguration后,识别正确进行。

但是,由于上下文,我当时面临着redirect循环。 我发现另一个post,build议将splunk的Web根目录移动到/splunk上下文而不是根目录( / ),通过更新,我现在可以通过IdP向mellonvalidationSplunk。 这是相关的工作configuration:

 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中/本地/ 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不支持并且应该保持为localhost。

使用以下步骤debuggingdebugging网页:

 <?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或类似的。 在testing阶段,您可以更改为任何您知道IdP版本的属性(邮件,cn …任何),以避免500问题。

最有可能的是IDP没有正确configurationLDAP并且没有对Mellon / Apache的额外configuration需求。

如果您可以发布SAML响应的转储,这将有助于进一步钻取问题。

请让我知道如果你想进一步讨论。

谢谢,桑迪E- [email protected]