Как стать поставщиком услуг SAML


Утра Всем

моя компания в настоящее время разрабатывает веб-приложение Java. У нескольких наших клиентов есть внутренние серверы SAML(поставщики удостоверений?) и попросили, чтобы мы интегрировались с ними. Так что недавно я читал об этом и играл с OpenAM. Примерно через 3 дня у меня есть общее понимание этого, но все еще есть некоторые пробелы в моих знаниях. Я надеюсь, что кто-то может прояснить это для меня.

так вот как я себе представляю рабочий процесс входа пользователя в систему.

давайте определим наших клиентов SAML server как https://their.samlserver.com. таким образом, пользователь приходит в наше веб-приложение для ресурса, который защищен. Допустим, что URL-адрес http://my.app.com/something.

так что если я прав,my.app.com это то, что SAML определяет как Провайдер. Наше приложение понимает, что этот пользователь должен войти в систему. Затем мы представляем страницу, как это для пользователя...

<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
    <input type="hidden" name="SAMLRequest" value="someBase64Data" />
    <input type="submit" value="Submit" />
</form>

и someBase64Data должно быть base64 закодированная версия...

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="identifier_1"
  Version="2.0"
  IssueInstant="2004-12-05T09:21:59Z"
  AssertionConsumerServiceIndex="0">
 <saml:Issuer>http://my.app.com</saml:Issuer>
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>

Итак, моя первая пара вопросов.

что такое ID значение, предполагают, чтобы быть?

и почему я могу объявить себя издатель?

знает ли обо мне провайдер идентификации? Может быть, это и есть то Круг доверия

Я видел на OpenAM. И если он знает обо мне, то откуда он знает обо мне и что ему нужно знать?

поэтому после того, как пользователь перенаправляется на эту страницу, они переходят на страницу, предоставленную IDP https://their.samlserver.com. они аутентифицируются на этой странице, и IDP делает это волшебство, чтобы проверить аутентификацию и найти пользователя. После успешной аутентификации IDP отправляет обратно <samlp:Response> определенными здесь.

еще несколько вопросов.

во-первых, как <samlp:Response> вернитесь к моему веб-приложению, чтобы я мог его проверить?

и что я должен искать в этом ответе, чтобы подтвердить, что он был успешным? Как выглядит неудача?

в настоящее время мы используем адрес электронной почты (LDAP) для идентификации пользователей, поэтому мы, вероятно, возьмем это из ответа и используем его так же, как и сейчас. Что-нибудь еще я следует ли помнить об этом в своем ответе?

Итак, теперь, когда мы проверили этот ответ на действительность, мы можем предоставить пользователю сеанс, как мы делаем в настоящее время. Но когда они хотят выйти из системы, есть ли рабочий процесс для этого? Должен ли я уведомлять IDP, что пользователь ушел?

и наконец, есть несколько тем, которые были брошены вокруг в моем чтении, и я не уверен, насколько они вписываются в этот процесс. Они Круг доверия,маркеры, и артефакты.

Спасибо за любую помощь всем. Я нашел много информации за последние пару дней, и вполне возможно, что я мог бы собрать их вместе после немного больше играть. Но мне еще предстоит найти простую статью рабочего процесса "вот сообщение". Может быть, это потому, что я ошибаюсь в том, как это работает. Может быть, это потому, что это не популярно. Но я действительно хотел убедиться, что я получил рабочий процесс, поэтому я не пропустил решающий шаг в чем-то, как важно, как проверка подлинности пользователя.

2 72

2 ответа:

в ответ на ваши конкретные вопросы:

1.) Каким должно быть значение" ID"?

  • это должен быть уникальный идентификатор для запроса SAML. В спецификации SAML 2.0 указано, что это действительно конкретная реализация, как это делается, но дает следующие рекомендации:

механизм, с помощью которого системный объект SAML гарантирует, что идентификатор уникален остается до реализации. В дело в том, что используется случайный или псевдослучайный метод, вероятность двух случайно выбранные идентичные идентификаторы должны быть меньше или равны до 2 ^ -128 и должно быть меньше или равно 2 ^-160 в длину. Это требование может быть выполнено путем кодирования случайно выбранного значения от 128 до 160 бит в длину.

2.- Откуда ВПЛ знает о вас?

  • ваш ИП должен быть зарегистрирован в IdP. К выполните это, спецификация SAML определяет формат для "метаданных SAML", который сообщает IdP, где находятся ваши приемники SAML, каковы ваши сертификаты, атрибуты, которыми вы обмениваетесь, и т. д. OpenAM, вероятно, диктует некоторые минимальные требования для настройки доверенного SP. Это зависит от каждого продукта.

3.) Куда идет ответ, и что проверять?

  • ответ будет отправлен на Ваш URL-адрес Службы потребителей утверждений (ACS), обычно определенный в метаданные SAML, которыми вы обмениваетесь из своего SP с IdP для начальной настройки. Когда вы получаете ответ SAML, вам нужно проверить много вещей - но самое главное, код состояния SAML должен быть "успешным", идентификаторы inResponseTo должны соответствовать отправленным запросам, и вы должны проверить цифровую подпись на утверждении. Для этого вам нужно будет доверять публичному сертификату проверки IdP, и вы, вероятно, также захотите выполнить проверку отзыва.

4.) А как насчет выхода из системы?

  • SAML 2.0 также определяет профиль для одиночного выхода из системы (SLO). Это не только выведет вас из SP, но также IdP и потенциально любые другие SP, с которыми вы установили сеанс. Он имеет аналогичный поток запросов/ответов, как единый вход (SSO), и, следовательно, аналогичные вещи для настройки и проверки (коды состояния, подписи и т. д.).

короче говоря - это может быть довольно сложно реализовать с нуля. Лучше всего использовать пробовал & истинные библиотеки и / или продукты, как предлагает Ян. Такие компании, как his, инвестировали сотни часов времени разработчика для реализации в соответствии со спецификацией и тестирования совместимости с другими поставщиками.

Если вы просто пытаетесь настроить одно приложение Java в качестве поставщика услуг, вы должны рассмотреть возможность использования Fedlet из любого Oracle (как самостоятельный ) или ForgeRock ( в комплекте с OpenAM ). У Forgerock Fedlet есть некоторые проблемы, взаимодействующие с Shibboleth 2.2.1 в качестве поставщика удостоверений, но я считаю, что он несколько проще в настройке и более информативен.

каждый имеет явные инструкции, содержащиеся в README, чтобы помочь вам развернуть. После настройки Fedlet и взаимодействия с IDP на странице успех отображается весь код, необходимый для интеграции федеративного единого входа в приложение. Он выполняет фоновую работу по отправке и получению AuthnRequests и ответов.

ответ Скотта довольно хорошо отвечает на ваши вопросы, но я думаю, что попытка написать код самостоятельно, который генерирует SAML, изобретает колесо. Fedlet был разработан именно с учетом этого случая использования.