Пружина SAML 2.0 сзади Nginx - PullRequest
       107

Пружина SAML 2.0 сзади Nginx

0 голосов
/ 16 марта 2020

У меня есть веб-приложение Spring-boot, которое использует проверку подлинности SAML, предоставленную https://samltest.id/.

Оно отлично работает на localhost, но сейчас я пытаюсь поставить его на сервер Nginx Ngnix настроен так, что любой http-запрос перенаправляется на https, а https://myserver.company.com/myApp/ отправляется на http://local_ip: local_port / .

. Этот cfg работает нормально, если приложение не имеет безопасности, но с SAML результат: когда я захожу на домашнюю страницу приложения, я перенаправляюсь на страницу входа (правильно), и после успешного входа я перенаправляюсь на https://myserver.company.com/saml/SSO/ из https://myserver.company.com/myApp/saml/SSO, поэтому Nginx дает 404.

Метаданные. xml содержит:

<md:AssertionConsumerService Location="http://myserver.company.com:80/saml/SSO"
    Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/>
<md:AssertionConsumerService Location="http://myserver.company.com:80/saml/SSO"
    Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/>

Обратите внимание, что URL являются http * На основе 1026 *.

После большого поиска в Google я попробовал следующее: Я изменил конфигурацию SAMLProcessingFilter, чтобы свойство filterProcessesUrl было "/myApp/saml/SSO" вместо значения по умолчанию "/saml/SSO".

Теперь метаданные. xml содержат:

<md:AssertionConsumerService Location="http://myserver.company.com:80/myApp/saml/SSO"
    Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/>
<md:AssertionConsumerService Location="http://myserver.company.com:80/myApp/saml/SSO"
    Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/>

и после входа в систему меня перенаправляют на https://myserver.company.com/myApp/saml/SSO, но на этот раз я получаю 404 из веб-приложения вместо Nginx (страница ошибки другая).

Чего мне не хватает?

ОБНОВЛЕНИЕ: 3-я попытка

* 10 46 * Восстановлено SAMLProcessingFilter cfg по умолчанию, изменило контекст root моего приложения, чтобы оно было http://local_ip: local_port / myApp , изменено Nginx cfg, чтобы https://myserver.company.com/myApp/ отображалось на http://local_ip: local_port / myApp (тот же контекст root), установлено entityBaseURL свойство от MetadataGenerator до https://myserver.company.com/myApp, загрузило новые метаданные. xml в https://samltest.id/ (теперь оно содержит URL-адреса https).

Теперь, после успешного входа в систему, я перенаправлен на https://myserver.company.com/myApp/saml/SSO, как и ожидалось, но я получаю 401 из приложения с сообщением «Ошибка аутентификации: входящее сообщение SAML недействительно» и в журнале приложения есть «org.opensaml.common.SAMLException: неподдерживаемый запрос».

1 Ответ

0 голосов
/ 18 марта 2020

После нескольких попыток я нашел решение. Нет необходимости изменять SAMLProcessingFilter или контекст root. Ключ должен использовать SAMLContextProviderLB вместо SAMLContextProviderImpl, как описано в главе " Расширенная конфигурация " руководства. Также необходимо изменить entityBaseURL, уже описанное в моем вопросе (оно также есть в руководстве).

...