Вопрос или проблема
Я установил модуль аутентификации apache_mod_mellon для Apache, чтобы интегрировать аутентификацию SAML с Azure AD.
Я сгенерировал xml-файл метаданных, ключ и сертификат для файла apache mellon metadata.sh и предоставил их команде Azure для настройки с их стороны. Я использую следующую конфигурацию apache.
Теперь проблема в том, что когда я впервые обращаюсь к myapp.company.com/MyApp (Java Spring веб-приложение), меня перенаправляет на страницу Azure AD, и после ввода учетных данных и OTP, меня перенаправляет обратно на “myapp.company.com/MyApp”. И так меня продолжает отправлять обратно в Azure, а Azure обратно в мое приложение, таким образом создается петля. Какую конфигурацию мне следует изменить, чтобы избежать этого?
Я полагаю, мне не нужно вносить изменения на уровне кода при интеграции с SAML, но сейчас кажется, что мне нужно вносить изменения на уровне кода, чтобы исправить проблему с петлей? Это правильно? Может ли кто-нибудь указать на ошибку в моей конфигурации? Я просмотрел всю документацию и ссылки, которые смог найти, и не вижу полезной информации по этой проблеме с петлей.
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/httpd/url_com.crt
SSLCertificateKeyFile /etc/httpd/url_com.key
ServerName myapp.company.com
ServerAlias myapp.company.com
ProxyPreserveHost On
ProxyPass /MyApp http://127.0.0.1:8080/webapp/home
ProxyPassReverse /MyApp http://127.0.0.1:8080/webapp/home
MellonCacheSize 100
MellonLockFile "/run/mod_auth_mellon/lock"
MellonPostDirectory "/var/cache/mod_auth_mellon_postdata/"
MellonPostTTL 900
MellonPostSize 1048576
MellonPostCount 100
<Location />
MellonEnable "auth"
MellonSPPrivateKeyFile /etc/httpd/mellon/https_url.com_mellon.key
MellonSPCertFile /etc/httpd/mellon/https_url.com_mellon.cert
MellonSPMetadataFile /etc/httpd/mellon/https_url.com_mellon.xml
MellonIdPMetadataFile /etc/httpd/mellon/idp-metadata.xml
MellonIdPCAFile /etc/httpd/mellon/poc_Dev.pem
MellonIdpPublicKeyFile /home/apbr1/poc_Dev.cer
</Location>
<Location /MyApp>
AuthType Mellon
MellonEnable auth
Require valid-user
MellonSubjectConfirmationDataAddressCheck "Off"
MellonSamlResponseDump On
#MellonPostReplay On
MellonDecoder "none"
MellonVariable "<%= $host %>"
MellonSecureCookie On
MellonUser "http://schemas.microsoft.com/identity/claims/displayname"
#ProxyPass http://127.0.0.1:8080/webapp/home
#ProxyPassReverse http://127.0.0.1:8080/webapp/home
</Location>
</VirtualHost>
Ответ или решение
Ваша проблема связана с оконечным зацикливанием между приложением и Azure AD при использовании модуля Apache mod_mellon для аутентификации SAML. Это зацикливание может быть вызвано различными факторами в настройке или во взаимодействии с вашим приложением. Рассмотрим некоторые возможные причины и решения:
1. Неправильная маршрутная конфигурация или перенаправления:
Ваша конфигурация Apache включает ProxyPass
и ProxyPassReverse
, которые могут вызывать зацикливание, если они настроены неправильно. Убедитесь, что маршруты настроены правильно и не вызывают повторное перенаправление к Azure на основе URL пути после аутентификации.
2. Конфигурация SAML:
-
Проверка метаданных: Убедитесь, что метаданные SP и IdP актуальны и корректны. Несоответствие метаданных также может быть причиной зацикливания.
-
Настройка Assertion Consumer Service (ACS) URL: Проверьте, что URL сервиса потребителя утверждений (ACS URL) правильно настроен и соответствует тому, что настроено на стороне Azure AD. ACS URL должен быть адресом, куда Azure отправляет утверждения после аутентификации.
3. Состояние сессии:
-
Проверьте куки: Включение
MellonSecureCookie
требует правильной настройки и может вызвать проблемы с сессией, если куки не передаются должным образом. -
MellonVariable: Переменная
${host}
может влиять на ссылку, на которую отправляется заявление. Убедитесь, что переменная корректна и не вызывает проблем с маршрутизацией.
4. Возможность кэширования:
Проверьте как кешируется SAML ответ и заявки. Если повторяются предыдущие заявки, это также может вызвать зацикливание.
5. Полнота интеграции с приложением:
Если проблема не решается посредством конфигурации сервера, стоит убедиться, что интеграция с самим приложением не требует доработок. Например, возможно, ваше Java Spring приложение обрабатывает или ожидает данные после аутентификации определённым образом.
Для устранения ошибки также рекомендуется:
-
Включить логирование: Используйте
MellonSamlResponseDump On
иMellonLogLevel
для детального анализа ответов и запросов SAML. -
Проверить кэшинг модулей Apache: Иногда может быть полезно очистить кэш или перезапустить Apache после изменения конфигурации.
Эти шаги помогут диагностировать и, вероятно, решить проблему зацикливания между вашим приложением и Azure AD. Убедитесь, что у вас есть доступ ко всем необходимым логам, чтобы подробно разобраться в тех моментах, на которых зацикливается обработка.
Применение этих рекомендаций должно помочь скорректировать вашу конфигурацию и устранить повторяющиеся перенаправления.