Протокол SAML для единого входа
В этой статье рассматриваются запросы и ответы проверки подлинности SAML 2.0, поддерживаемые идентификатором Microsoft Entra для единого входа.
На следующей схеме протокола описывается последовательность единого входа. Облачная служба (поставщик услуг) использует привязку перенаправления HTTP для передачи элемента AuthnRequest
(запрос проверки подлинности) в идентификатор Microsoft Entra (поставщик удостоверений). Затем идентификатор Microsoft Entra использует привязку записи HTTP для публикации элемента Response
в облачную службу.
Заметка
В этой статье описывается использование SAML для единого входа. Дополнительные сведения о других способах обработки единого входа (например, с помощью OpenID Connect или встроенной проверки подлинности Windows) см. в единый вход в приложения видентификатора Microsoft Entra ID.
AuthnRequest
Чтобы запросить проверку подлинности пользователя, облачные службы отправляют элемент AuthnRequest
идентификатору Microsoft Entra ID. Пример 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
, AssertionConsumerServiceIndex
, AttributeConsumerServiceIndex
, и 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 id выдает утверждениеNameID
в качестве парного идентификатора. -
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
: идентификатор Microsoft Entra id выдает утверждениеNameID
в формате адреса электронной почты. -
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
: это значение позволяет идентификатору Записи Майкрософт выбрать формат утверждения. Идентификатор 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.
Заметка
Если RequestedAuthnContext
включен в запрос SAML, элемент Comparison
должен иметь значение exact
.
Идентификатор Microsoft Entra поддерживает следующие значения AuthnContextClassRef
.
Метод проверки подлинности | URI класса контекста проверки подлинности |
---|---|
Kerberos | urn:oasis:name:tc:SAML:2.0:ac:classes:Kerberos |
Имя пользователя и пароль | urn:oasis:name:tc:SAML:2.0:ac:classes:Password |
Инфраструктура открытого ключа PGP | urn:oasis:name:tc:SAML:2.0:ac:classes:PGP |
Безопасный удаленный пароль | urn:oasis:name:tc:SAML:2.0:ac:classes:SecureRemotePassword |
Цифровая подпись XML | urn:oasis:name:tc:SAML:2.0:ac:classes:XMLDSig |
Простая инфраструктура открытого ключа | urn:oasis:name:tc:SAML:2.0:ac:classes:SPKI |
Смарт-карта | urn:oasis:name:tc:SAML:2.0:ac:classes:Smartcard |
Смарт-карта с закрытым ключом и ПИН-кодом | urn:oasis:name:tc:SAML:2.0:ac:classes:SmartcardPKI |
Клиент TLS | urn:oasis:name:tc:SAML:2.0:ac:classes:TLSClient |
Неопределенное | urn:oasis:name:tc:SAML:2.0:ac:classes:Unspecified |
Сертификат X.509 | urn:oasis:name:tc:SAML:2.0:ac:classes:X509 |
Встроенная проверка подлинности Windows | urn:federation:authentication:windows |
Области
Элемент Scoping
, который включает список поставщиков удостоверений, необязателен в AuthnRequest
элементах, отправленных в идентификатор Microsoft Entra.
Если это указано, не включайте атрибут ProxyCount
, IDPListOption
или элемент RequesterID
, так как они не поддерживаются.
Подпись
Элемент Signature
в элементах AuthnRequest
является необязательным. Идентификатор Microsoft Entra можно настроить для применения требования к подписанным запросам проверки подлинности. Если включена, принимаются только подписанные запросы проверки подлинности, в противном случае проверка запрашивателя предоставляется только в ответ на зарегистрированные URL-адреса службы потребителей утверждений.
Тема
Не включать элемент Subject
. Идентификатор Microsoft Entra не поддерживает указание темы в AuthnRequest
и возвращает ошибку, если она указана.
Вместо этого можно указать тему, добавив параметр login_hint
в HTTP-запрос к URL-адресу единого входа с именем субъекта в качестве значения параметра.
Ответ
После успешного завершения запрошенного входа идентификатор 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
включает результат запроса авторизации. Идентификатор 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>
Утверждение
Помимо ID
, IssueInstant
и Version
идентификатор 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
(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 ID.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>