Единый вход весной с использованием расширений 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).
Итак, у меня есть несколько вопросов:
- Является ли хорошей идеей использовать Spring SAML непосредственно в качестве SP с точки зрения масштабируемости и удобства обслуживания?
- Можно ли использовать внешний SP вместе с Spring Security? Как мне настроить свое приложение и / или сервер приложений (JBoss 8.0 - WildFly)?
- Где я могу определить роли (для каждого сценария)?
- Какой стоит выбрать?
С уважением, В.
1 ответ
Основное различие между ними заключается в сценарии развертывания:
- ПлагиныShibboleth SP устанавливаются непосредственно на веб-сервер Apache/IIS.
- Spring SAML встроен в ваше приложение.
У обоих есть плюсы и минусы.
- Является ли хорошей идеей использовать Spring SAML непосредственно в качестве SP с точки зрения масштабируемости и удобства обслуживания?
Весенний SAML
- Обеспечивает отличный контроль над тем, как выполняется аутентификация и как процесс аутентификации взаимодействует с вашим приложением. Например, вы можете создавать свои собственные пользовательские интерфейсы конфигурации и динамически добавлять IDP, создавать собственные экраны входа в систему как часть вашего приложения, иметь полный и простой контроль над обработкой ошибок, легко поддерживать несколько IDP, динамически настраивать детали SSO (запрошенные AuthnContexts, NameID, привязки). аутентификация).
- Легко анализировать полученные атрибуты SAML в различных форматах, поддерживать несколько методов аутентификации в одном приложении.
- Динамически генерируйте метаданные SP, он обеспечивает ограниченную многопользовательскую среду и поддерживает профили, недоступные во всех других параметрах (например, "Единый выход", "Держатель ключа", "Обнаружение IDP").
- Беспрепятственно взаимодействует с Spring Security, что дает целый ряд преимуществ. Spring SAML также позволяет настроить полную политику аутентификации и авторизации непосредственно в вашем приложении (например, для каких страниц требуется аутентификация или нет, и когда, контроль доступа к контенту на основе ролей, повышение уровня аутентификации в динамических условиях,...).
- Позволяет развертывать приложение на любом сервере приложений или в контейнере и за любым обратным прокси-сервером или веб-сервером, не влияя на функциональность.
Плагины Shibboleth
- Они статически настроены и обычно взаимодействуют с вашим приложением через заголовки HTTP. Они отделяют логику аутентификации от самого приложения, поэтому единственное, о чем вам нужно позаботиться, - это принятие заголовков и инициализация сеанса приложения с правильным контекстом безопасности. Определение того, какие страницы защищены, присутствует на сервере IIS/Apache и основано на шаблонах URL, что означает, что политика проверки подлинности и авторизации частично определяется за пределами вашего приложения.
- Вы должны убедиться, что к приложению можно получить доступ только через веб-сервер (= запретить любой прямой доступ), так как это позволит подделывать заголовки.
- Не требует много изменений в самом приложении и поэтому может легко использоваться с устаревшими системами.
- Можно ли использовать внешний SP вместе с Spring Security? Как мне настроить свое приложение и / или сервер приложений (JBoss 8.0 - WildFly)?
Да, это возможно, но это потребует усилий. Например, вы можете настроить WildFly для установки файла cookie общего домена в зашифрованном формате и проверки файла cookie в конфигурации Spring Security.
- Где я могу определить роли (для каждого сценария)?
Spring SAML определяет роли при обработке ответа SAML, например, путем анализа атрибутов SAML. Это делается путем реализации SAMLUserDetailsService
интерфейс и подключение к samlAuthenticationProvider
,
С помощью Shibboleth вы можете пересылать атрибуты, полученные от IDP, в ваше приложение с заголовками и анализировать их в своем приложении.
WildFly (вероятно) позволяет вам определять контекст безопасности и роли непосредственно в SP без необходимости настраивать это в вашем приложении. Такая конфигурация не может быть переносимой между серверами приложений.
- Какой стоит выбрать?
Все опции позволят вам выполнить WebSSO с SAML 2.0. Люди обычно выбирают на основе своих требований (например, потребностей в настройке), среды (используемый веб-сервер, сервер приложений), предпочтительную методологию разработки (Java, .NET и т. Д.), Используемые платформы, устаревший код. Плагины Spring SAML и Shibboleth используются многими клиентами.