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


Определение технического профиля поставщика удостоверений SAML в настраиваемой политике Azure Active Directory B2C

Примечание

В Azure Active Directory B2C пользовательские политики преимущественно предназначены для выполнения сложных сценариев. В большинстве случаев рекомендуется использовать встроенные пользовательские потоки. Ознакомьтесь со статьей Начало работы с настраиваемыми политиками в Azure Active Directory B2C, чтобы узнать о базовом пакете настраиваемых политик, если еще не сделали этого.

Azure Active Directory B2C (Azure AD B2C) поддерживает поставщик удостоверений SAML 2.0. В этой статье описаны особенности технического профиля для взаимодействия с поставщиком утверждений, который поддерживает этот стандартизированный протокол. С помощью технического профиля SAML можно создавать федерацию с поставщиком удостоверений на основе SAML, например ADFS и Salesforce. Она позволяет пользователям выполнять вход с использованием их удостоверений для социальных сетей или корпоративных удостоверений.

Обмен метаданными

Метаданные — это сведения, используемые в протоколе SAML для предоставления конфигурации стороны SAML, например поставщика услуг или поставщика удостоверений. Метаданные определяют расположение служб, например вход и выход, сертификаты, метод входа и многое другое. Поставщик удостоверений использует метаданные, чтобы узнать, как взаимодействовать с Azure AD B2C. Метаданные настраиваются в формате XML и могут быть подписаны с помощью цифровой подписи, чтобы другая сторона могла проверить их целостность. Когда служба Azure AD B2C создает федерацию с поставщиком удостоверений SAML, она выступает в качестве поставщика услуг, инициируя запрос SAML и ожидая ответ SAML. Кроме того, в некоторых случаях она принимает незапрашиваемую аутентификацию SAML, которая также называется инициированной поставщиком удостоверений.

Метаданные можно настроить у обеих сторон как "Статические метаданные" или "Динамические метаданные". В статическом режиме все метаданные копируются у одной стороны и настраиваются у другой. В динамическом режиме для метаданных задается URL-адрес, в то время как другая сторона считывает конфигурацию динамически. Принципы те же: вы задаете метаданные технического профиля Azure AD B2C у поставщика удостоверений и задаете метаданные поставщика удостоверений в Azure AD B2C.

В каждом поставщике удостоверений SAML предусмотрены разные действия для предоставления и настройки поставщика услуг (в данном случае Azure AD B2C), а также настройки метаданных Azure AD B2C в поставщике удостоверений. Рекомендации о том, как это сделать, см. в документации поставщика удостоверений.

В указанном ниже примере показан URL-адрес метаданных SAML, связанных с техническим профилем Azure AD B2C.

https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/your-policy/samlp/metadata?idptp=your-technical-profile

Измените следующие значения:

  • your-tenant-name — именем клиента, например fabrikam.b2clogin.com.
  • your-policy — именем собственной политики. Используйте политику с настроенным техническим профилем поставщика SAML или политику, которая от нее наследуется.
  • your-technical-profile — именем технического профиля поставщика удостоверений SAML.

Обмен сертификатами для цифровой подписи

Чтобы создать отношение доверия между Azure AD B2C и поставщиком удостоверений SAML, необходимо указать допустимый сертификат X509 с закрытым ключом. Отправьте сертификат с закрытым ключом (PFX-файл) в хранилище ключей политики Azure AD B2C. Azure AD B2C подписывает запрос на вход SAML с использованием предоставленного вами сертификата.

Сертификат используется в следующих случаях.

  • Azure AD B2C создает и подписывает запрос SAML, используя закрытый ключ Azure AD B2C сертификата. Запрос SAML отправляется поставщику удостоверений, который проверяет запрос с помощью открытого ключа Azure AD B2C сертификата. Получить доступ к открытому сертификату Azure AD B2C можно с помощью метаданных технического профиля. Кроме того, можно вручную отправить CER-файл поставщику удостоверений SAML.
  • Поставщик удостоверений подписывает данные, отправляемые в Azure AD B2C, с помощью закрытого ключа поставщика удостоверений сертификата. Azure AD B2C проверяет данные, используя открытый сертификат поставщика удостоверений. В каждом поставщике удостоверений предусмотрены разные действия по настройке. Рекомендации о том, как это сделать, см. в документации к поставщикам удостоверений. В Azure AD B2C политике требуется доступ к открытому ключу сертификата с использованием метаданных поставщика удостоверений.

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

На следующей схеме показан обмен метаданными и сертификатами:

обмен метаданными и сертификатами

Цифровое шифрование

Чтобы зашифровать утверждение ответа SAML, поставщик удостоверений всегда использует открытый ключ сертификата шифрования в техническом профиле Azure AD B2C. Когда службе Azure AD B2C необходимо расшифровать данные, она использует закрытую часть сертификата шифрования.

Шифрование утверждения ответа SAML:

  1. Отправьте допустимый сертификат X509 с закрытым ключом (PFX-файл) в хранилище ключей политики Azure AD B2C.
  2. Добавьте элемент CryptographicKey с идентификатором SamlAssertionDecryption в коллекцию CryptographicKeys технического профиля. Задайте для StorageReferenceId имя ключа политики, созданного на шаге 1.
  3. Задайте для метаданных технического профиля WantsEncryptedAssertions значение true.
  4. Добавьте в поставщик удостоверений новые метаданные технического профиля Azure AD B2C. В параметре KeyDescriptor свойству use должно быть присвоено значение encryption, содержащее открытый ключ сертификата.

В следующем примере показан раздел дескриптора ключа метаданных SAML, который используется для шифрования:

<KeyDescriptor use="encryption">
  <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
    <X509Data>
      <X509Certificate>valid certificate</X509Certificate>
    </X509Data>
  </KeyInfo>
</KeyDescriptor>

Протокол

Атрибуту Name элемента Protocol необходимо присвоить значение SAML2.

Входящие утверждения

Элемент InputClaims используется для отправки NameId в Subject запроса AuthN SAML. Для этого добавьте входящее утверждение с параметром PartnerClaimType, для которого установлено значение subject.

<InputClaims>
	<InputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="subject" />
</InputClaims>

Исходящие утверждения

Элемент OutputClaims содержит список утверждений, возвращаемых поставщиком удостоверений SAML, в разделе AttributeStatement. Возможно, потребуется сопоставить имя утверждения, определенное в вашей политике, с именем, определенным у поставщика удостоверений. Вы также можете добавить утверждения, которые не возвращаются поставщиком удостоверений, установив атрибут DefaultValue.

Выходное утверждение имени субъекта

Чтобы считать утверждение SAML NameId в поле Subject как нормализованное утверждение, задайте для утверждения PartnerClaimType значение атрибута SPNameQualifier. Если атрибут SPNameQualifier отсутствует, установите для утверждения PartnerClaimType значение атрибута NameQualifier.

Утверждение SAML

<saml:Subject>
  <saml:NameID SPNameQualifier="http://your-idp.com/unique-identifier" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">david@contoso.com</saml:NameID>
  <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
    <SubjectConfirmationData InResponseTo="_cd37c3f2-6875-4308-a9db-ce2cf187f4d1" NotOnOrAfter="2020-02-15T16:23:23.137Z" Recipient="https://your-tenant.b2clogin.com/your-tenant.onmicrosoft.com/B2C_1A_TrustFrameworkBase/samlp/sso/assertionconsumer" />
    </SubjectConfirmation>
  </saml:SubjectConfirmation>
</saml:Subject>

Исходящее утверждение:

<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="http://your-idp.com/unique-identifier" />

Если атрибуты SPNameQualifier или NameQualifier не представлены в утверждении SAML, задайте для утверждения PartnerClaimType значение assertionSubjectName. Убедитесь, что NameId является первым значением в XML утверждения. При определении нескольких утверждений Azure AD B2C выбирает значения субъекта из последнего утверждения.

В этом примере показаны утверждения, возвращаемые поставщиком удостоверений SAML:

  • Утверждение issuerUserId сопоставляется с утверждением assertionSubjectName.
  • Утверждение first_name сопоставляется с утверждением givenName.
  • Утверждение last_name сопоставляется с утверждением surname.
  • Утверждение displayName которое сопоставляется с утверждением name.
  • Утверждение email не сопоставляется с именем.

Технический профиль также возвращает утверждения, которые не возвращаются поставщиком удостоверений:

  • Утверждение IdentityProvider, содержащее имя поставщика удостоверений.
  • утверждение AuthenticationSource со значением по умолчанию socialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="assertionSubjectName" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email"  />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

Элемент OutputClaimsTransformations может содержать коллекцию элементов OutputClaimsTransformation, которые используются для изменения исходящих утверждений или создания новых.

Метаданные

attribute Обязательно Описание
PartnerEntity Да URL-адрес метаданных поставщика удостоверений SAML. Также можно скопировать метаданные поставщика удостоверений и добавить их в элемент CDATA <![CDATA[Your IDP metadata]]>. Внедрять метаданные поставщика удостоверений не рекомендуется. Поставщик удостоверений может изменить параметры или обновить свой сертификат. Если метаданные поставщика удостоверений были изменены, получите новые метаданные и обновите ими свою политику.
WantsSignedRequests Нет Указывает, требуется ли для технического профиля, чтобы все исходящие запросы аутентификации были подписаны. Возможные значения: true или false. Значение по умолчанию — true. Если присвоено значение true, криптографический ключ SamlMessageSigning должен быть указан и все исходящие запросы аутентификации должны быть подписаны. Если присвоено значение false, параметры SigAlg и Signature (строка запроса или параметр отправки) не включаются в запрос. Эти метаданные также определяют атрибут AuthnRequestsSigned метаданных, который представляет собой выходные данные в метаданных технического профиля Azure AD B2C, совместно используемого с поставщиком удостоверений. Azure AD B2C не подписывает запрос, если атрибут WantsSignedRequests в метаданных технического профиля имеет значение false и атрибут WantAuthnRequestsSigned метаданных поставщика удостоверений имеет значение false или не указан.
XmlSignatureAlgorithm Нет Метод, который Azure AD B2C использует для подписывания запроса SAML. Эти метаданные определяют значение параметра SigAlg (строка запроса или параметр отправки) в запросе SAML. Возможные значения: Sha256, Sha384, Sha512 или Sha1 (по умолчанию). Настройте алгоритм подписи на обеих сторонах, используя одно и то же значение. Используйте только тот алгоритм, который поддерживается вашим сертификатом.
WantsSignedAssertions Нет Указывает, требуется ли для технического профиля, чтобы все входящие утверждения были подписаны. Возможные значения: true или false. Значение по умолчанию — true. Если присвоено значение true, весь раздел утверждений saml:Assertion, отправленный поставщиком удостоверений в Azure AD B2C, должен быть подписан. Если присвоено значение false, поставщик удостоверений не должен подписывать утверждения, но даже если он подпишет, Azure AD B2C не будет проверять его подпись. Эти метаданные также определяют флаг WantsAssertionsSigned метаданных, который представляет собой выходные данные в метаданных технического профиля Azure AD B2C, совместно используемого с поставщиком удостоверений. Если отключить проверку утверждений, также может понадобиться отключить проверку подписи ответа (дополнительные сведения см. в разделе ResponsesSigned).
ResponsesSigned Нет Возможные значения: true или false. Значение по умолчанию — true. Если присвоено значение false, поставщик удостоверений не должен подписывать ответ SAML, но даже если он подпишет, Azure AD B2C не проверит его подпись. Если присвоено значение true, ответ SAML, отправляемый поставщиком удостоверений в Azure AD B2C, подписан и должен быть проверен. Если отключить проверку ответов SAML, также может понадобиться отключить проверку подписи утверждений (дополнительные сведения см. в разделе WantsSignedAssertions).
WantsEncryptedAssertions Нет Указывает, требуется ли для технического профиля, чтобы все входящие утверждения были зашифрованы. Возможные значения: true или false. Значение по умолчанию — false. Если присвоено значение true, утверждения, отправляемые поставщиком удостоверений в Azure AD B2C, должны быть подписаны, а также необходимо указать криптографический ключ SamlAssertionDecryption. Если присвоено значение true, метаданные технического профиля Azure AD B2C включают в себя раздел encryption. Поставщик удостоверений считывает метаданные и шифрует утверждение ответа SAML с помощью открытого ключа, указанного в метаданных технического профиля Azure AD B2C. Если включить шифрование утверждений, также может понадобиться отключить проверку подписи ответа (дополнительные сведения см. в разделе ResponsesSigned).
NameIdPolicyFormat Нет Задает ограничения для идентификатора имени, который будет использоваться для представления запрашиваемого субъекта. Если не указан, для запрашиваемого субъекта можно использовать любой тип идентификатора, поддерживаемый поставщиком удостоверений. Например, urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified. NameIdPolicyFormat можно использовать с NameIdPolicyAllowCreate. Сведения о поддерживаемых политиках идентификаторов имен см. в документации к поставщику удостоверений.
NameIdPolicyAllowCreate Нет При использовании NameIdPolicyFormat можно также указать свойство AllowCreate атрибута NameIDPolicy. Значение этих метаданных (true или false) указывает, разрешено ли поставщику удостоверений создавать учетную запись в процессе входа. Рекомендации о том, как это сделать, см. в документации поставщика удостоверений.
AuthenticationRequestExtensions Нет Необязательные элементы расширения сообщений протокола, согласованные между Azure AD B2C и поставщиком удостоверений. Расширение представлено в формате XML. Данные XML добавляются внутри <![CDATA[Your IDP metadata]]> элемента CDATA. Сведения о поддержке элемента расширений см. в документации к поставщику удостоверений.
IncludeAuthnContextClassReferences Нет Указывает одну ссылку URI или несколько, определяющих классы контекста проверки подлинности. Например, чтобы разрешить пользователю выполнять вход с использованием только имени пользователя и пароля, задайте значение urn:oasis:names:tc:SAML:2.0:ac:classes:Password. Чтобы разрешить вход с использованием имени пользователя и пароля через защищенный сеанс (SSL/TLS), укажите PasswordProtectedTransport. Сведения о поддерживаемых URI AuthnContextClassRef см. в документации к поставщику удостоверений. Укажите несколько URI в виде списка с разделителями-запятыми.
IncludeKeyInfo Нет Указывает, содержит ли запрос на проверку подлинности SAML открытый ключ сертификата, если привязка имеет значение HTTP-POST. Возможные значения: true или false.
IncludeClaimResolvingInClaimsHandling Нет Для входящих и исходящих утверждений указывает, включено ли разрешение утверждений в технический профиль. Возможные значения: true или false (по умолчанию). Если вы хотите использовать сопоставитель утверждений в техническом профиле, задайте для этого параметра значение true.
SingleLogoutEnabled Нет Указывает, будет ли технический профиль при входе пытаться выйти из федеративных поставщиков удостоверений. Дополнительные сведения см. в разделе Выход из сеанса Azure AD B2C. Возможные значения: true (по умолчанию) и false.
ForceAuthN Нет Передает значение ForceAuthN в запросе проверки подлинности SAML, чтобы определить, будет ли внешний IDP SAML принудительно запрашивать у пользователя проверку подлинности. По умолчанию Azure AD B2C задает для параметра ForceAuthN значение false при первом входе. Если после этого сеанс сбрасывается (например, с помощью prompt=login в OIDC), ForceAuthN будет присвоено значение true. Установка элемента метаданных так, как показано ниже, приведет к принудительному использованию значения для всех запросов к внешнему IDP. Возможные значения: true или false.
ProviderName Нет Передает значение ProviderName в запросе проверки подлинности SAML.

Криптографические ключи

Элемент CryptographicKeys содержит следующие атрибуты.

attribute Обязательно Описание
SamlMessageSigning Да Сертификат X509 (набор ключей RSA), используемый для подписывания сообщений SAML. Azure AD B2C использует этот ключ для подписывания запросов и отправки их поставщику удостоверений.
SamlAssertionDecryption Нет* Сертификат X509 (ключ RSA не установлен). Поставщик удостоверений SAML использует открытую часть сертификата для шифрования утверждения ответа SAML. Azure AD B2C использует закрытую часть сертификата для расшифровки утверждения.

* Требуется, если внешний поставщик удостоверений шифрует утверждения SAML.
MetadataSigning Нет Сертификат X509 (набор ключей RSA), используемый для подписывания метаданных SAML. Azure AD B2C использует этот ключ для подписывания метаданных.

Дальнейшие действия

Примеры работы с поставщиками удостоверений SAML в Azure AD B2C см. в следующих статьях: