Поиск обратной связи по первой реализации SAML

Мне поручено разработать очень простой процесс единого входа (единого входа). Мой работодатель указал, что он должен быть реализован в SAML. Я бы хотел создать максимально простые сообщения, подтверждая спецификации SAML.

Я был бы очень благодарен, если бы кто-то из вас посмотрел мои сообщения о запросе и ответе и сказал мне, если они имеют смысл для моей цели, если они включают в себя что-то, что не должно быть там, и если они отсутствуют все, что должно быть там.

Кроме того, я хотел бы знать, где в ответе я должен добавить дополнительную информацию о предмете; в частности, адрес электронной почты субъекта.

Взаимодействие должно работать следующим образом:

  • Пользователь запрашивает услугу у поставщика услуг на данный момент, поставщик услуг ничего не знает о пользователе.
  • Поставщик услуг запрашивает аутентификацию для пользователя от поставщика удостоверения.
  • Пользователь аутентифицирован/зарегистрирован поставщиком удостоверений
  • Поставщик удостоверений отвечает поставщику услуг с сообщением об успешности аутентификации, адресом электронной почты пользователя PLUS.

Здесь я думаю, что запрос должен быть:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
ID="abc" 
IssueInstant="1970-01-01T00:00:00.000Z" 
Version="2.0"
AssertionConsumerServiceURL="http://www.IdentityProvider.com/loginPage">
   <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
    http://www.serviceprovider.com
    </saml:Issuer>
    <saml:Subject>
        <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID>
    </saml:Subject>

Здесь я думаю, что ответ должен быть:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://www.serviceprovider.com/desitnationURL" ID="123" IssueInstant="2008-11-21T17:13:42.872Z" Version="2.0">
    <samlp:Status>
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </samlp:Status>
    <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0">
        <saml:Subject>
            <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID>
            <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:profiles:SSO:browser">
                <saml:SubjectConfirmationData InResponseTo="abc"/>
            </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:AuthnStatement AuthnInstant="2008-11-21T17:13:42.899Z">
            <saml:AuthnContext>
                <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
            </saml:AuthnContext>
        </saml:AuthnStatement>
    </saml:Assertion>
</samlp:Response>

Итак, опять мои вопросы:

  • Является ли это действительным взаимодействием SAML?

  • Можно ли упростить XML-запрос или ответ?

  • Где в ответе я должен указать адрес электронной почты субъекта?

Я очень ценю вашу помощь. Большое спасибо!

-Morgan

Ответ 1

Вам не нужен Тема в запросе - глядя на спецификации, я думаю, что это может быть так просто:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  ID="abc" Version="2.0" IssueInstant="1970-01-01T00:00:00.000Z"
</samlp:AuthnRequest>

Опуская все необязательные элементы и атрибуты (Эмитент, NameIDPolicy, AssertionConsumerServiceURL и т.д.), означает, что поставщик удостоверения личности и поставщик услуг согласовали их спереди, поэтому их не нужно указывать в AuthnRequest. Если вы контролируете оба конца, и вы абсолютно знаете, что вы никогда не добавите в микс другого провайдера, это совершенно законный запрос SAML. Это означает "Аутентифицировать пользователя, который представляет это через механизм, который мы согласовали".

Глядя на ответ, я думаю, что это минимальный случай:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  ID="123" InResponseTo="abc" IssueInstant="2008-11-21T17:13:42.872Z" 
  Version="2.0">
    <samlp:Status>
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </samlp:Status>
    <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0">
        <saml:Subject>
            <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
                [email protected]
            </saml:NameID>
        </saml:Subject>
        <saml:AuthnStatement AuthnInstant="2008-11-21T17:13:42.899Z">
            <saml:AuthnContext>
                <saml:AuthnContextClassRef>
                    urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
                </saml:AuthnContextClassRef>
            </saml:AuthnContext>
        </saml:AuthnStatement>
    </saml:Assertion>
</samlp:Response>

Вы можете отправить адрес электронной почты пользователя в качестве идентификатора NameID, и AuthnStatement просто несет в себе тот факт, что поставщик удостоверения подлинности аутентифицировал пользователя в данный момент данным механизмом. Опять же, это удаляется в кости - мы опускаем атрибуты и элементы, такие как Destination и SubjectConfirmationMethod, поскольку они являются излишними для использования.

Итак, в этом ответе говорится: "Это [email protected], он вошел в систему с паролем через защищенный транспорт (SSL/TLS) в 17:13:42 от 11/21/2008".

Вы должны взглянуть на спецификацию профилей SAML 2.0 для точного механизма прохождения этих функций взад и вперед. AuthnRequest обычно сжимается, кодируется и передается в качестве параметра URL в GET, а самый простой способ вернуть ответ - через привязку POST - возвращает HTML-страницу с формой, целью которой является поставщик услуг и которая отправляется на время загрузки страницы через некоторый JavaScript.

Ответ 2

  • Да, это похоже на взаимодействие SAML

  • Теперь ваш ответ аутентификации довольно прост. Обычно вы хотите добавить больше атрибутов в свои утверждения. И ради безопасности, по крайней мере, ответ должен быть подписан.

  • Он используется для установки после. В вашем случае у вас его нет, поэтому после состояния должно быть хорошо...

Я бы порекомендовал вам создать учетную запись в http://www.ssocircle.com и с одним профилировщиком HTTP-заголовков (то есть классическим и большим LiveHttpHeaders) и отладчик SAML2 (отладчик Feide Rn SAML2 спасибо, ребята!) взгляните на поток запроса/ответа..

Надеюсь, что это поможет,

Луис

ps: если вы хотите взглянуть на полную реализацию SP/IdP: http://sourceforge.net/projects/spring-saml/files%2F0.1/