Как стать поставщиком услуг 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 ответа:
в ответ на ваши конкретные вопросы:
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 был разработан именно с учетом этого случая использования.