#java #tomcat #single-sign-on #saml-2.0 #opensaml
#java #tomcat #единый вход #saml-2.0 #opensaml
Вопрос:
У меня есть Java-приложение, запущенное на сервере tomcat. Я сохраняю информацию о пользователе в таблице mysql и для аутентификации с использованием службы Java Rest. Теперь, когда я приземляюсь на customer.myapp.com Я хочу проверить, есть ли в браузере активный сеанс для customer.com , если это так, войдите в мое приложение, используя этот сеанс внутренне. Если сеанса нет, то перенаправьте пользователя на customer.com войдите на портал и после входа в систему войдите в customer.myapp.com домашняя страница.
Как я могу реализовать это с помощью SAML. Я просмотрел теоретические части и получил представление о SP (в данном случае customer.myapp.com ) и IdP (я предполагаю, что это будет портал входа клиента customer.com ) . Я даже скачал OpenSAML jar. Я понятия не имею, как должна выполняться конфигурация. В моем случае у меня нет никакого доступа к ВПЛ.
public class EMSAMLObjectBuilder {
// Get the builder factory
XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();
// Get the assertion builder based on the assertion element name
@SuppressWarnings("unchecked")
SAMLObjectBuilder<Assertion> builder = (SAMLObjectBuilder<Assertion>) builderFactory.getBuilder(Assertion.DEFAULT_ELEMENT_NAME);
// Create the assertion
Assertion assertion = builder.buildObject();
}
Это единственный фрагмент кода, который я смог найти. Любая помощь?
Ответ №1:
Звучит как стандартный вариант использования профиля веб-браузера SAML. Я бы посоветовал ознакомиться с ним. В Интернете много информации.
В основном процесс идет следующим образом.
- SP и IDP обмениваются метаданными TAXML. Это можно сделать любым способом, например, по электронной почте или путем публикации xml на веб-сервере. Это делается только один раз между SP и IDP.
- Когда SP хочет аутентифицировать пользователя, он отправляет его IDP, используя, например, перенаправление вместе с запросом аутентификации SAML.
- IDP аутентифицирует пользователя.
- IDP отправляет пользователя обратно в SP вместе с ответом проверки подлинности SAML
SAML — очень гибкий протокол, поэтому описанный выше поток может меняться. Как осуществляется обмен данными, как правило, ближе указано в метаданных.
Это может быть реализовано несколькими способами, OpenSAML — один из них. На официальном сайте OpenSAML есть несколько полезных примеров.
Я пишу блог на OpenSAML с большим количеством полезных сообщений на эту тему. Я также написал книгу «Руководство по OpenSAML«, в которой шаг за шагом описывается реализация поставщика услуг SAML для веб-браузера.
По совпадению, пример приложения в книге работает на встроенном tomcat.
Комментарии:
1. Я прочитал ваш блог, думаю, я прочитал много разных вещей и сейчас совершенно запутался. Не могли бы вы сказать мне, с чего мне следует начать? В настоящее время на моем локальном хосте запущено приложение tomcat на основе Java, которое должно быть моим поставщиком услуг. В настоящее время у меня нет Idp, но я подумываю об использовании того же приложения, запущенного на tomcat на другом компьютере, и использовании другой базы данных. На моей странице входа в систему поставщика услуг я дам перенаправление на логин Idp с некоторыми метаданными (если я прав). Как получить эти метаданные и как разрешить моему Idp обрабатывать запрос
2. Я прочитал ссылки, но там сказано, как это работает, но не сказано, как я могу реализовать это в моем существующем приложении. Это срочное требование, кто-нибудь может помочь?
3.Я обновил ответ. Что касается реализации. В этих двух сообщениях кое-что говорится о реализации шагов 2 и 4. blog.samlsecurity.com/2011/01/redirect-with-authnrequest.html blog.samlsecurity.com/2011/02 /.… Второй касается отправки ответа SAML с использованием артефакта. В этом процессе IDP отправляет указатель на ответ SAML. Затем SP разрешает его при вызове SOAP WS.
4. Спасибо за ответ :), но предоставленные вами ссылки на блог, похоже, не работают
5. О? Я попробовал их, теперь все в порядке. Какую страницу вы получаете, следуя им?
Ответ №2:
Я чувствую, что вы никогда не должны напрямую использовать библиотеки, такие как OpenSAML, которые действительно низкоуровневые и сложные в освоении. Если вы хотите защитить свое веб-приложение с помощью процесса входа в систему SAML, вам, безусловно, следует использовать библиотеку безопасности для этого. Отказ от ответственности: Я создатель pac4j, поэтому я могу порекомендовать использовать одну из реализаций pac4j: http://www.pac4j.org/implementations.html для SAML: http://www.pac4j.org/docs/clients/saml.html