Протокол единого входа SAML
В этой статье рассматриваются запросы и ответы проверки подлинности SAML 2.0, поддерживаемые идентификатором Microsoft Entra для единого входа.
На следующей схеме протокола описывается последовательность единого входа. Облачная служба (поставщик служб) использует привязку ПЕРЕНАПРАВЛЕНия HTTP для передачи AuthnRequest
элемента (запроса проверки подлинности) идентификатору Microsoft Entra (поставщику удостоверений). Затем идентификатор Microsoft Entra использует привязку записи HTTP для публикации Response
элемента в облачную службу.
Примечание.
В этой статье рассматривается использование SAML для единого входа. Дополнительные сведения о других способах обработки единого входа (например, с помощью OpenID Подключение или интегрированной проверка подлинности Windows) см. в статье "Единый вход в приложения" в идентификаторе Microsoft Entra.
AuthnRequest
Чтобы запросить проверку подлинности пользователя, облачные службы отправляют AuthnRequest
элемент в идентификатор Microsoft Entra. Пример SAML 2.0 AuthnRequest
должен выглядеть примерно так:
<samlp:AuthnRequest
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w"
Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
Параметр | Тип | Описание |
---|---|---|
ID |
Обязательное поле | Идентификатор Microsoft Entra использует этот атрибут для заполнения InResponseTo атрибута возвращаемого ответа. Идентификатор не должен начинаться с цифры, поэтому общая стратегия предусматривает добавление такой строки, как ID, в начало строкового представления GUID. Например, id6c1c178c166d486687be4aaf5e482730 — допустимый идентификатор. |
Version |
Обязательное поле | Этот параметр должен иметь значение 2.0 . |
IssueInstant |
Обязательное поле | Это строка DateTime со значением в формате всемирного времени (UTC) и с преобразованием без потери данных ("o"). Идентификатор Microsoft Entra ожидает значение DateTime этого типа, но не оценивает или не использует значение. |
AssertionConsumerServiceURL |
Необязательно | Если этот параметр указан, этот параметр должен соответствовать RedirectUri облачной службе в идентификаторе Microsoft Entra ID. |
ForceAuthn |
Необязательно | Это логическое значение. Если значение true, это означает, что пользователь будет вынужден повторно пройти проверку подлинности, даже если у него есть действительный сеанс с идентификатором Microsoft Entra. |
IsPassive |
Необязательно | Это логическое значение, указывающее, должен ли идентификатор Microsoft Entra автоматически проходить проверку подлинности пользователя без взаимодействия с пользователем, используя файл cookie сеанса, если он существует. Если это верно, идентификатор Microsoft Entra пытается пройти проверку подлинности пользователя с помощью файла cookie сеанса. |
Все остальные AuthnRequest
атрибуты, такие как Consent
, Destination
, AttributeConsumerServiceIndex
AssertionConsumerServiceIndex
и ProviderName
игнорируются.
Идентификатор Microsoft Entra также игнорирует Conditions
элемент в AuthnRequest
.
Издатель
Элемент Issuer
в объекте AuthnRequest
должен точно соответствовать одному из servicePrincipalNames в облачной службе в идентификаторе Microsoft Entra. Обычно здесь передается URI идентификатора приложения , указанный во время регистрации приложения.
Фрагмент SAML, в котором содержится элемент Issuer
, выглядит так:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
NameIDPolicy
Этот элемент запрашивает определенный формат идентификатора имени в ответе и является необязательным в AuthnRequest
элементах, отправляемых в идентификатор Microsoft Entra.
Элемент NameIdPolicy
выглядит так:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Если элемент NameIDPolicy
указан, можно включить его необязательный атрибут Format
. У атрибута Format
может быть только одно из следующих значений, так как любое другое значение приводит к ошибке.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
: идентификатор Microsoft Entra выдаетNameID
утверждение в качестве парного идентификатора.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: идентификатор Microsoft Entra выдаетNameID
утверждение в формате адреса электронной почты.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: это значение позволяет идентификатору Microsoft Entra выбрать формат утверждения. Идентификатор Microsoft Entra выдаетNameID
утверждение в качестве парного идентификатора.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
: идентификатор Microsoft Entra выдаетNameID
утверждение как случайно созданное значение, уникальное для текущей операции единого входа. Это означает, что значение является временным и не может использоваться для идентификации пользователя, проверяющего подлинность.
Если SPNameQualifier
задано, идентификатор Microsoft Entra содержит то же SPNameQualifier
самое в ответе.
Идентификатор Microsoft Entra игнорирует AllowCreate
атрибут.
RequestedAuthnContext
Элемент RequestedAuthnContext
указывает нужные методы проверки подлинности. Это необязательно в элементах, отправляемых в AuthnRequest
идентификатор Microsoft Entra. Идентификатор Microsoft Entra поддерживает AuthnContextClassRef
такие значения, как urn:oasis:names:tc:SAML:2.0:ac:classes:Password
.
Scoping
Элемент Scoping
, включающий список поставщиков удостоверений, является необязательным в AuthnRequest
элементах, отправленных в идентификатор Microsoft Entra.
Если он указан, не включайте атрибут ProxyCount
, а также элемент IDPListOption
или RequesterID
, так как они не поддерживаются.
Подпись
Элемент Signature
в элементах AuthnRequest
не является обязательным. Microsoft Entra ID можно настроить для принудительного применения требования подписанных запросов проверки подлинности. Если этот параметр включен, принимаются только подписанные запросы проверки подлинности, в противном случае проверка отправителя осуществляется путем отправки ответа только на зарегистрированные URL-адреса службы обработчика утверждений.
Тема
Не включайте элемент Subject
. Идентификатор Microsoft Entra не поддерживает указание темы и AuthnRequest
возвращает ошибку, если она указана.
Вместо этого субъект можно указать, добавив параметр login_hint
в HTTP-запрос к URL-адресу единого входа с идентификатором NameID субъекта в качестве значения параметра.
Response
После успешного завершения запрошенного входа идентификатор Microsoft Entra публикует ответ на облачную службу. Ответ на успешную попытку входа может выглядеть следующим образом:
<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="C2dE3fH4iJ5kL6mN7oP8qR9sT0uV1w" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
Response
Элемент Response
включает результат запроса на авторизацию. Идентификатор Microsoft Entra задает ID
Version
значения и IssueInstant
значения в элементеResponse
. Он также задает следующие атрибуты:
Destination
: при успешном выполнении входа оно устанавливаетсяRedirectUri
поставщиком услуг (облачной службой).InResponseTo
. Для этого атрибута задается значениеID
элементаAuthnRequest
, инициировавшего ответ.
Издатель
Идентификатор Microsoft Entra задает Issuer
элемент https://sts.windows.net/<TenantIDGUID>/
, в котором <TenantIDGUID>
находится идентификатор клиента клиента Microsoft Entra.
Например, ответ с элементом Issuer может выглядеть следующим образом:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Состояние
Элемент Status
передает сведения об успешной или неудачной попытке входа. Он включает элемент StatusCode
, содержащий код или набор блоков вложенного кода, который представляет состояние запроса. Он также включает элемент StatusMessage
, содержащий настраиваемые сообщения об ошибках, создаваемые во время входа.
Ниже приведен пример ответа SAML на неудачную попытку входа.
<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
</samlp:StatusCode>
<samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
Trace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
</samlp:Status>
</samlp:Response>
Assertion
ID
Version
IssueInstant
Помимо идентификатора и идентификатора Microsoft Entra задает следующие элементы в Assertion
элементе ответа.
Издатель
Для этого задан https://sts.windows.net/<TenantIDGUID>/
<TenantIDGUID>
идентификатор клиента клиента Microsoft Entra.
<Issuer>https://sts.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
Подпись
Идентификатор Microsoft Entra подписывает утверждение в ответ на успешный вход. В элементе Signature
содержится цифровая подпись, которую может использовать облачная служба для проверки подлинности источника, чтобы проверять целостность утверждения.
Для создания этой цифровой подписи идентификатор Microsoft Entra использует ключ подписи в элементе IDPSSODescriptor
документа метаданных.
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
Тема
Указывает принцип, который является субъектом операторов в утверждении. Он содержит элемент NameID
, который представляет пользователя, прошедшего аутентификацию. Значение NameID
— целевой идентификатор, направляемый только поставщику услуг, который является аудиторией маркера. Оно носит постоянный характер. Это значение можно отменить, но нельзя переназначить. Оно также непрозрачно, так как не раскрывает никаких сведений о пользователе и его нельзя использовать в качестве идентификатора для запросов на атрибуты.
Для атрибута Method
элемента SubjectConfirmation
всегда задано значение urn:oasis:names:tc:SAML:2.0:cm:bearer
.
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
Условия
Этот элемент указывает условия, определяющие приемлемое использование утверждений SAML.
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
Атрибуты NotBefore
и NotOnOrAfter
указывают интервал, в течение которого утверждение допустимо.
- Значение атрибута
NotBefore
равно значению атрибутаIssueInstant
в элементеAssertion
или немного больше (менее чем на секунду). Идентификатор Microsoft Entra не учитывает никакой разницы между собой и облачной службой (поставщиком услуг) и не добавляет буфер в это время. - Значение атрибута
NotOnOrAfter
на 70 минут больше, чем значение атрибутаNotBefore
.
Аудитория
Он содержит код URI, который определяет предполагаемую аудиторию. Идентификатор Microsoft Entra задает значение этого элемента значением Issuer
элемента, AuthnRequest
инициируемого входом. Чтобы оценить значение Audience
, используйте значение App ID URI
, указанное при регистрации приложения.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Issuer
Как и значение, Audience
значение должно точно соответствовать одному из имен субъектов-служб, представляющих облачную службу в идентификаторе Microsoft Entra ID. Но если значения элемента Issuer
и URI отличаются, значение Audience
в ответе — это Issuer
с префиксом spn:
.
AttributeStatement
В этом элементе содержатся утверждения о субъекте или пользователе. В следующем фрагменте приведен пример элемента AttributeStatement
. Многоточие указывает, что в элементе могут содержаться несколько атрибутов и их значений.
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
- Утверждение Name. Значение атрибута
Name
(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
) — это имя участника-пользователя, прошедшего проверку подлинности, напримерtestuser@managedtenant.com
. - Утверждение ObjectIdentifier— значение
ObjectIdentifier
атрибута (http://schemas.microsoft.com/identity/claims/objectidentifier
) являетсяObjectId
объектом каталога, который представляет прошедшего проверку подлинности пользователя в идентификаторе Microsoft Entra. ЗначениеObjectId
неизменяемое, глобально уникальное и повторно использует безопасный идентификатор пользователя, прошедшего проверку подлинности.
AuthnStatement
Этот элемент служит утверждением того, что проверка подлинности субъекта утверждения выполнена определенным средством в определенное время.
- Атрибут
AuthnInstant
указывает время, в течение которого пользователь прошел проверку подлинности с помощью идентификатора Microsoft Entra. - Элемент
AuthnContext
указывает контекст аутентификации, использованный для аутентификации пользователя.
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>