SAML для Java-приложения, работающего на Tomcat

#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. Я бы посоветовал ознакомиться с ним. В Интернете много информации.

В основном процесс идет следующим образом.

  1. SP и IDP обмениваются метаданными TAXML. Это можно сделать любым способом, например, по электронной почте или путем публикации xml на веб-сервере. Это делается только один раз между SP и IDP.
  2. Когда SP хочет аутентифицировать пользователя, он отправляет его IDP, используя, например, перенаправление вместе с запросом аутентификации SAML.
  3. IDP аутентифицирует пользователя.
  4. 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