Поведение SAML при использовании HTTP-сервера для высокой доступности

Я реализовал поддержку SAML SSO, чтобы мое приложение выступало в качестве поставщика услуг с использованием Spring Security SAML Extension. Мне удалось интегрировать свой SP с разными IDP. Так, например, у меня есть HostA, HostB и HostC, все они имеют разные экземпляры моего приложения. У меня был файл метаданных SP, указанный для каждого хоста, и я установил AssertionConsumerServiceURL с URL-адресом этого хоста (EX:https:HostA.com/myapp/saml/sso). Я добавил каждый файл метаданных в IDP и протестировал их все, и все работает нормально.

Однако мой проект также поддерживает высокую доступность за счет настройки IBM HTTP Server для балансировки нагрузки. Таким образом, в этом случае HTTP-сервер настроит хосты (A, B, C) чтобы быть хостами, используемыми для балансировки нагрузки, пользователь будет получать доступ к моему приложению, используя URL-адрес HTTP-сервера: https:httpserver.com/myapp/

Если бы я определил один файл метаданных SP и указал URL-адрес HTTP-сервера в AssertionConsumerServiceURL( https://httpserver.com/saml/sso ) и изменил свою реализацию, чтобы принимать утверждения, нацеленные на мой HTTP-сервер, каков результат этого сценария:

  1. Пользователь обращается к HTTP-серверу, который отправил пользователя на HostA (за кулисами)
  2. Мое приложение SP в HostA отправляет запрос IDP для аутентификации.
  3. IDP отправляет ответ на мой https-сервер как: https://httpserver.com/saml/sso .

Будет ли HTTP-сервер перенаправлять на HostA следующим образом: https://HostA.com/saml/sso

Спасибо.


person Omar Azzam    schedule 05.12.2014    source источник


Ответы (1)


При развертывании одного и того же экземпляра приложения в кластерном режиме за балансировщиком нагрузки вам необходимо указать внутренним приложениям общедоступный URL-адрес на HTTP-сервере (https://httpserver.com/myapp/), за которыми они развернуты. Это можно сделать с помощью SAMLContextProviderLB (дополнительную информацию см. в вручную). Но вы, кажется, уже успешно выполнили этот шаг.

Как только ваш HTTP-сервер получит запрос, он перенаправит его на один из ваших хостов по URL-адресу, например. https://HostA.com/saml/sso и обычно также предоставляет исходный URL-адрес в качестве заголовка HTTP. . SAMLContextProviderLB заставит приложение SP думать, что реальный URL был https://httpserver.com/saml/sso что заставит его пройти все проверки безопасности SAML, связанные с целевым URL.

Поскольку серверные приложения сохраняют состояние в своих HttpSessions, обязательно выполните одно из следующих действий:

  • включить липкую сессию на HTTP-сервере (чтобы связанные запросы всегда направлялись на один и тот же сервер
  • обязательно реплицируйте сеанс HTTP в вашем кластере
  • отключить проверку идентификатора ответа, включив bean-компонент EmptyStorageFactory в конфигурацию Spring (эта опция также делает недоступным единый выход)
person Vladimír Schäfer    schedule 05.12.2014
comment
Спасибо Владимир. Я попробую это решение и вернусь к вам с результатами. - person Omar Azzam; 07.12.2014
comment
Я установил HTTP-сервер и внес изменения, рекомендованные выше, и все заработало нормально. Спасибо. - person Omar Azzam; 18.12.2014