Назад | Перейти на главную страницу

Ошибка SSO Splunk SAML от IdP с Apache mod_mellon

Я пытаюсь настроить 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