Подтвердить что ты не робот

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

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

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

Давайте определим наш клиент SAML сервер как 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>

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

Какое значение идентификатора должно быть?

И почему я могу объявить себя эмитентом?

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

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

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

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

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

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

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

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

И, наконец, есть несколько тем, которые обсуждались в моем чтении, и я не уверен, как они вписываются в этот рабочий процесс. Это Круг доверия, Жетоны и Артефакты.

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

4b9b3361

Ответ 1

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

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

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

Механизм, посредством которого системный объект SAML обеспечивает уникальность идентификатора, оставлен для реализации. В случае, если используется случайный или псевдослучайный метод, вероятность того, что два случайно выбранных идентификатора будут идентичными, ДОЛЖНА быть меньше или равна 2 ^ -128 и ДОЛЖНА быть меньше или равна 2 ^ -160 по длине. Это требование МОЖЕТ быть удовлетворено путем кодирования произвольно выбранного значения длиной от 128 до 160 бит.

2.) Как IdP узнает о вас?

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

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

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

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

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

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

Ответ 2

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

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

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