Single-Sign-On

來自帶有 Apache mod_mellon 的 IdP 的 Splunk SAML SSO 失敗

  • December 1, 2015

我正在嘗試使用 mod_mellon 和 mod 代理將 SSO 從 IdP 配置到 Apache 到 splunk。

環境:Ubuntu 14.04;阿帕奇 2.4.7;mod-auth-梅隆 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 Redirect 參數)。這些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 只知道身份

看起來有很多事情是錯誤的。首先,當我修改 SAML 設置時,我沒有意識到需要將元數據從我的 IdP 重新複製回 apache 配置。無論如何,在確保在 Apache 中正確配置了 IdP 和 SP xml 文件之後,我能夠繼續前進(我想我已經更改了實體 ID)

在錯誤日誌中要求有效使用者時,我仍然遇到錯誤。事實證明,它MellonEnable "auth"負責確保存在有效使用者,而由於某種原因,Require valid-user參數AuthType "Mellon"觸發了錯誤和 500 個伺服器響應。

刪除這 2 個指令後,這次我仍然遇到錯誤Could not find metadata for the IdP "(null)"- 經過快速搜尋,事實證明lassoUbuntu 14.04 LTS (2.4.0) 上可用的最新版本不適用於 IdP 預設使用的 SHA256 簽名. 套索 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不支持且應保留為 localhost。

引用自:https://serverfault.com/questions/739756