Я пытаюсь настроить SSO с IdP на Apache с помощью mod_mellon и прокси-сервера для splunk.
Среда: Ubuntu 14.04; Apache 2.4.7; мод-авторизация-меллон 0.7.0.
Apache настроен с помощью сгенерированного mellon ключа / сертификата на ssl-сайте по умолчанию. mod proxy используется для прокси для локального splunk на порту 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 / HTTP Redirect). в urn_service.*
файлы создаются из mellon_create_metadata.sh
сценарий, который создает сертификат x509 и ключ в конфигурационном файле SP и xml.
Когда я пытаюсь получить доступ к splunk от IdP, я вижу ошибки в файле журнала apache и получаю ответ об ошибке 500 / Internal server:
[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 просто знает об идентичности
Похоже, что ряд вещей был неправильным. Во-первых, я не осознавал, что метаданные необходимо скопировать из моего IdP обратно в конфигурации apache, когда я изменил настройки SAML на этой стороне. В любом случае, убедившись, что файлы IdP и SP xml правильно настроены в Apache, я смог двигаться дальше (я думаю, что изменил идентификатор объекта)
Я по-прежнему получал сообщение об ошибке, требующее наличия действительного пользователя в журналах ошибок. Оказывается, что 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) не работает с подписями SHA256, которые IdP использовал по умолчанию. Lasso 2.5 поддерживает SHA256. После обновления конфигурации IdP с использованием совместимого алгоритма идентификация прошла правильно.
Однако затем я столкнулся с петлями перенаправления из-за контекста. Я нашел еще одно сообщение, в котором предлагалось переместить веб-корень splunk в /splunk
контекст вместо корневого (/
), и, обновив это, я теперь могу аутентифицироваться в Splunk через mellon от IdP. Вот соответствующие рабочие конфигурации:
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.
Подготовьте веб-страницу отладки со следующим:
<?php
header('Content-Type: text/plain');
foreach($_SERVER as $key=>$value) {
if(substr($key, 0, 7) == 'MELLON_') {
echo($key . '=' . $value . "\r\n");
}
}
?>
Можете ли вы проверить, находится ли идентификатор пользователя в
MellonUser "NAME_ID"
NAME_ID
атрибут? Мне это кажется подозрительным. Обычно это uid
или похожие. На этапе тестирования вы можете изменить любой атрибут, который вы знаете о выпусках IdP (mail, cn ... что угодно), просто чтобы избежать проблемы 500.
Скорее всего, IDP неправильно настроен с LDAP, и для Mellon / Apache нет необходимости в дополнительной настройке.
Если вы можете опубликовать дамп ответа SAML, это поможет подробнее разобраться в проблеме.
Пожалуйста, дайте мне знать, если вы хотите продолжить обсуждение.
Спасибо, Сэнди E- Sandy@mirketa.com