Поделиться через


Протокол SAML для единого входа

В этой статье рассматриваются запросы и ответы проверки подлинности SAML 2.0, поддерживаемые идентификатором Microsoft Entra для единого входа.

На следующей схеме протокола описывается последовательность единого входа. Облачная служба (поставщик услуг) использует привязку перенаправления HTTP для передачи элемента AuthnRequest (запрос проверки подлинности) в идентификатор Microsoft Entra (поставщик удостоверений). Затем идентификатор Microsoft Entra использует привязку записи HTTP для публикации элемента Response в облачную службу.

снимок экрана с одним рабочим процессом Sign-On (единый вход).

Заметка

В этой статье описывается использование 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>