Ищете отзывы о первой реализации SAML - PullRequest
11 голосов
/ 21 декабря 2008

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

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

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

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

  1. Пользователь запрашивает услугу у поставщика услуг, в этот момент поставщик услуг ничего не знает о пользователе.
  2. Поставщик услуг запрашивает аутентификацию пользователя у поставщика удостоверений
  3. Пользователь аутентифицирован / зарегистрирован провайдером удостоверений личности
  4. Поставщик удостоверений отвечает поставщику услуг сообщением об успешной проверке подлинности, а также адресом электронной почты ПЛЮС пользователя.

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

<?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>

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

  1. Это действительное взаимодействие SAML?

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

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

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

-Morgan

Ответы [ 2 ]

12 голосов
/ 07 января 2009

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

<?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>

Пропуск всех необязательных элементов и атрибутов (Issuer, 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">
                user@example.com
            </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, так как они излишни для варианта использования.

Итак, в этом ответе говорится: «Это user@example.com; он вошел в систему с паролем через защищенный транспорт (SSL / TLS) в 17:13:42 21.11.2008».

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

1 голос
/ 13 мая 2012
  1. Да, это похоже на взаимодействие SAML

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

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

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

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

Луис

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...