來自帶有 Apache mod_mellon 的 IdP 的 Splunk SAML SSO 失敗
我正在嘗試使用 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)"
- 經過快速搜尋,事實證明lasso
Ubuntu 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。