Единый вход весной с использованием расширений SAML и Shibboleth

Я хотел бы реализовать слой аутентификации Single Sign-on (SSO) в моем приложении на базе Spring с целью поддержки аутентификации и авторизации из разных доменов безопасности. Я выбрал Shibboleth в качестве IdP, но мне еще предстоит определить, что я буду использовать для SP.

Варианты выбора:

  • Расширение SAML Spring Security: компонент позволяет новым и существующим приложениям выступать в качестве поставщика услуг в федерациях на основе протокола SAML 2.0 и включать единый вход в систему через Интернет. Spring Security Extension позволяет беспрепятственно комбинировать SAML 2.0 и другие механизмы аутентификации и федерации в одном приложении. Все продукты, поддерживающие SAML 2.0 в режиме Identity Provider (например, ADFS 2.0, Shibboleth, OpenAM/OpenSSO, RM5 IdM или Ping Federate), могут использоваться для соединения с расширением SAML Spring Security.

  • Shibboleth (также как SP): Shibboleth - это веб-технология, которая реализует HTTP/POST, артефакты и атрибуты push-профилей SAML, включая компоненты Identity Provider (IdP) и Service Provider (SP).

Итак, у меня есть несколько вопросов:

  1. Является ли хорошей идеей использовать Spring SAML непосредственно в качестве SP с точки зрения масштабируемости и удобства обслуживания?
  2. Можно ли использовать внешний SP вместе с Spring Security? Как мне настроить свое приложение и / или сервер приложений (JBoss 8.0 - WildFly)?
  3. Где я могу определить роли (для каждого сценария)?
  4. Какой стоит выбрать?

С уважением, В.

1 ответ

Решение

Основное различие между ними заключается в сценарии развертывания:

  • ПлагиныShibboleth SP устанавливаются непосредственно на веб-сервер Apache/IIS.
  • Spring SAML встроен в ваше приложение.

У обоих есть плюсы и минусы.


  1. Является ли хорошей идеей использовать Spring SAML непосредственно в качестве SP с точки зрения масштабируемости и удобства обслуживания?

Весенний SAML

  • Обеспечивает отличный контроль над тем, как выполняется аутентификация и как процесс аутентификации взаимодействует с вашим приложением. Например, вы можете создавать свои собственные пользовательские интерфейсы конфигурации и динамически добавлять IDP, создавать собственные экраны входа в систему как часть вашего приложения, иметь полный и простой контроль над обработкой ошибок, легко поддерживать несколько IDP, динамически настраивать детали SSO (запрошенные AuthnContexts, NameID, привязки). аутентификация).
  • Легко анализировать полученные атрибуты SAML в различных форматах, поддерживать несколько методов аутентификации в одном приложении.
  • Динамически генерируйте метаданные SP, он обеспечивает ограниченную многопользовательскую среду и поддерживает профили, недоступные во всех других параметрах (например, "Единый выход", "Держатель ключа", "Обнаружение IDP").
  • Беспрепятственно взаимодействует с Spring Security, что дает целый ряд преимуществ. Spring SAML также позволяет настроить полную политику аутентификации и авторизации непосредственно в вашем приложении (например, для каких страниц требуется аутентификация или нет, и когда, контроль доступа к контенту на основе ролей, повышение уровня аутентификации в динамических условиях,...).
  • Позволяет развертывать приложение на любом сервере приложений или в контейнере и за любым обратным прокси-сервером или веб-сервером, не влияя на функциональность.

Плагины Shibboleth

  • Они статически настроены и обычно взаимодействуют с вашим приложением через заголовки HTTP. Они отделяют логику аутентификации от самого приложения, поэтому единственное, о чем вам нужно позаботиться, - это принятие заголовков и инициализация сеанса приложения с правильным контекстом безопасности. Определение того, какие страницы защищены, присутствует на сервере IIS/Apache и основано на шаблонах URL, что означает, что политика проверки подлинности и авторизации частично определяется за пределами вашего приложения.
  • Вы должны убедиться, что к приложению можно получить доступ только через веб-сервер (= запретить любой прямой доступ), так как это позволит подделывать заголовки.
  • Не требует много изменений в самом приложении и поэтому может легко использоваться с устаревшими системами.

  1. Можно ли использовать внешний SP вместе с Spring Security? Как мне настроить свое приложение и / или сервер приложений (JBoss 8.0 - WildFly)?

Да, это возможно, но это потребует усилий. Например, вы можете настроить WildFly для установки файла cookie общего домена в зашифрованном формате и проверки файла cookie в конфигурации Spring Security.


  1. Где я могу определить роли (для каждого сценария)?

Spring SAML определяет роли при обработке ответа SAML, например, путем анализа атрибутов SAML. Это делается путем реализации SAMLUserDetailsService интерфейс и подключение к samlAuthenticationProvider,

С помощью Shibboleth вы можете пересылать атрибуты, полученные от IDP, в ваше приложение с заголовками и анализировать их в своем приложении.

WildFly (вероятно) позволяет вам определять контекст безопасности и роли непосредственно в SP без необходимости настраивать это в вашем приложении. Такая конфигурация не может быть переносимой между серверами приложений.


  1. Какой стоит выбрать?

Все опции позволят вам выполнить WebSSO с SAML 2.0. Люди обычно выбирают на основе своих требований (например, потребностей в настройке), среды (используемый веб-сервер, сервер приложений), предпочтительную методологию разработки (Java, .NET и т. Д.), Используемые платформы, устаревший код. Плагины Spring SAML и Shibboleth используются многими клиентами.

Другие вопросы по тегам