Определение технического профиля Microsoft Entra в пользовательской политике Azure Active Directory B2C

Примечание.

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

Azure Active Directory B2C (Azure AD B2C) обеспечивает поддержку управления пользователями Microsoft Entra. В этой статье описаны особенности технического профиля для взаимодействия с поставщиком утверждений, который поддерживает этот стандартизированный протокол.

Протокол

Атрибуту Name элемента Protocol необходимо присвоить значение Proprietary. Атрибут handler должен содержать полное имя сборки обработчика протокола Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

После начального пакета пользовательской политики Технические профили Microsoft Entra включают технический профиль AAD-Common . Технические профили Microsoft Entra не указывают протокол, так как протокол настроен в техническом профиле AAD-Common :

  • AAD-UserReadUsingAlternativeSecurityId и AAD-UserReadUsingAlternativeSecurityId-NoError — поиск учетной записи социальной сети в каталоге;
  • AAD-UserWriteUsingAlternativeSecurityId — создание новой учетной записи социальной сети;
  • AAD-UserReadUsingEmailAddress — поиск локальной учетной записи в каталоге;
  • AAD-UserWriteUsingLogonEmail — создание новой локальной учетной записи;
  • AAD-UserWritePasswordUsingObjectId — обновление пароля локальной учетной записи;
  • AAD-UserWriteProfileUsingObjectId — обновление профиля пользователя локальной учетной записи или учетной записи социальной сети;
  • AAD-UserReadUsingObjectId — чтение профиля пользователя локальной учетной записи или учетной записи социальной сети;
  • AAD-UserWritePhoneNumberUsingObjectId — запись номера телефона MFA локальной учетной записи или учетной записи социальной сети.

В следующем примере показан технический профиль AAD-Common:

<TechnicalProfile Id="AAD-Common">
  <DisplayName>Azure Active Directory</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

  <CryptographicKeys>
    <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
  </CryptographicKeys>

  <!-- We need this here to suppress the SelfAsserted provider from invoking SSO on validation profiles. -->
  <IncludeInSso>false</IncludeInSso>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

InputClaims

Элемент InputClaims содержит утверждение, которое используется для поиска учетной записи в каталоге или создания новой. В коллекции входных утверждений для всех технических профилей Microsoft Entraim должен быть ровно один элемент InputClaim. Возможно, вам потребуется сопоставить имя утверждения, определенного в политике, с именем, определенным в идентификаторе Microsoft Entra.

Для чтения, обновления или удаления существующей учетной записи пользователя входной записи является ключом, который однозначно идентифицирует учетную запись в каталоге Microsoft Entra. Например, objectId, userPrincipalName, signInNames.emailAddress, signInNames.username или alternativeSecurityId.

При создании новой учетной записи пользователя входное утверждение — это ключ, однозначно определяющий локальную или федеративную учетную запись. Например, локальная учетная запись: signInNames.emailAddress или signInNames.userName. Для федеративной учетной записи: alternativeSecurityId.

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

OutputClaims

Элемент OutputClaims содержит список утверждений, возвращаемых техническим профилем Microsoft Entra. Возможно, вам потребуется сопоставить имя утверждения, определенного в политике, с именем, определенным в идентификаторе Microsoft Entra. Можно также включить утверждения, которые не возвращаются идентификатором Microsoft Entra, если вы задали DefaultValue атрибут.

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

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

  • objectId — идентификатор новой учетной записи;
  • newUser — указывает, является ли пользователь новым;
  • authenticationSource — задает для проверки подлинности значение localAccountAuthentication;
  • userPrincipalName — имя участника-пользователя новой учетной записи;
  • signInNames.emailAddress — учетное имя учетной записи, подобное входному утверждению email.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="objectId" />
  <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
  <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
  <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
</OutputClaims>

PersistedClaims

Элемент PersistedClaims содержит все значения, которые должны сохраняться идентификатором Microsoft Entra с возможным сопоставлением данных между типом утверждения, уже определенным в разделе ClaimsSchema в политике и именем атрибута Microsoft Entra.

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

  <PersistedClaims>
    <!-- Required claims -->
    <PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
    <PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
    <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
    <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration" />

    <!-- Optional claims. -->
    <PersistedClaim ClaimTypeReferenceId="givenName" />
    <PersistedClaim ClaimTypeReferenceId="surname" />
  </PersistedClaims>

Имя утверждения — это имя атрибута Microsoft Entra, если атрибут PartnerClaimType не указан, который содержит имя атрибута Microsoft Entra.

Требования к операции

  • В контейнере утверждений для всех технических профилей Microsoft Entraim должен быть ровно один элемент InputClaim .
  • В статье об атрибутах профиля пользователя описаны поддерживаемые Azure AD B2C атрибуты профиля пользователя, которые можно использовать во входных утверждениях, исходящих утверждениях и сохраненных утверждениях.
  • Для операций Write или DeleteClaims он также должен быть указан в элементе PersistedClaims.
  • Значение утверждения userPrincipalName должно быть в формате user@tenant.onmicrosoft.com.
  • Утверждение DisplayName является обязательным и не может быть пустой строкой.

Операции технического профиля Microsoft Entra

Читать

Операция Read считывает данные об одной учетной записи пользователя. Следующий технический профиль считывает данные об учетной записи пользователя с использованием objectId пользователя:

<TechnicalProfile Id="AAD-UserReadUsingObjectId">
  <Metadata>
    <Item Key="Operation">Read</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
  </InputClaims>
  <OutputClaims>

    <!-- Required claims -->
    <OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />

    <!-- Optional claims -->
    <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="otherMails" />
    <OutputClaim ClaimTypeReferenceId="givenName" />
    <OutputClaim ClaimTypeReferenceId="surname" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

Запись

Операция Write создает или обновляет одну учетную запись пользователя. Следующий технический профиль создает новую учетную запись социальной сети:

<TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
  <Metadata>
    <Item Key="Operation">Write</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
    <Item Key="UserMessageIfClaimsPrincipalAlreadyExists">You are already registered, please press the back button and sign in instead.</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="CreateOtherMailsFromEmail" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="AlternativeSecurityId" PartnerClaimType="alternativeSecurityId" Required="true" />
  </InputClaims>
  <PersistedClaims>
    <!-- Required claims -->
    <PersistedClaim ClaimTypeReferenceId="alternativeSecurityId" />
    <PersistedClaim ClaimTypeReferenceId="userPrincipalName" />
    <PersistedClaim ClaimTypeReferenceId="mailNickName" DefaultValue="unknown" />
    <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />

    <!-- Optional claims -->
    <PersistedClaim ClaimTypeReferenceId="otherMails" />
    <PersistedClaim ClaimTypeReferenceId="givenName" />
    <PersistedClaim ClaimTypeReferenceId="surname" />
  </PersistedClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
    <OutputClaim ClaimTypeReferenceId="otherMails" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

DeleteClaims

Операция DeleteClaims удаляет данные из указанного списка утверждений. Следующий технический профиль удаляет утверждения:

<TechnicalProfile Id="AAD-DeleteClaimsUsingObjectId">
  <Metadata>
    <Item Key="Operation">DeleteClaims</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
  </InputClaims>
  <PersistedClaims>
    <PersistedClaim ClaimTypeReferenceId="objectId" />
    <PersistedClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" PartnerClaimType="strongAuthenticationPhoneNumber" />
  </PersistedClaims>
  <OutputClaims />
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

DeleteClaimsPrincipal

Операция DeleteClaimsPrincipal удаляет одну учетную запись пользователя из каталога. Следующий технический профиль удаляет учетную запись пользователя из каталога, используя имя участника-пользователя:

<TechnicalProfile Id="AAD-DeleteUserUsingObjectId">
  <Metadata>
    <Item Key="Operation">DeleteClaimsPrincipal</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
  </InputClaims>
  <OutputClaims/>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

Следующий технический профиль удаляет учетную запись пользователя социальной сети с помощью alternativeSecurityId:

<TechnicalProfile Id="AAD-DeleteUserUsingAlternativeSecurityId">
  <Metadata>
    <Item Key="Operation">DeleteClaimsPrincipal</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="alternativeSecurityId" Required="true" />
  </InputClaims>
  <OutputClaims/>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

Метаданные

Атрибут Обязательное поле Описание
Операция Да Операция, которая выполняется. Возможные значения: Read, Write, DeleteClaims или DeleteClaimsPrincipal.
RaiseErrorIfClaimsPrincipalDoesNotExist No Вызывает ошибку, если объект пользователя не существует в каталоге. Возможные значения: true или false.
RaiseErrorIfClaimsPrincipalAlreadyExists No Вызывает ошибку, если объект пользователя уже существует. Возможные значения: true или false. Эти метаданные применимы только для операции записи.
ApplicationObjectId No Идентификатор объекта приложения для атрибутов расширения. Значение: ObjectId приложения. Дополнительные сведения см. в статье Использование настраиваемых атрибутов.
ClientId No Идентификатор клиента для доступа к арендатору в качестве третьей стороны. Дополнительные сведения см. в статье Использование настраиваемых атрибутов в пользовательской политике изменения профиля
IncludeClaimResolvingInClaimsHandling No Для входящих и исходящих утверждений указывает, включено ли разрешение утверждений в технический профиль. Возможные значения: true или false (по умолчанию). Если вы хотите использовать сопоставитель утверждений в техническом профиле, задайте для этого параметра значение true.

Элементы пользовательского интерфейса

Параметры ниже можно использовать для настройки сообщения об ошибке, отображаемого при сбое. Метаданные должны быть настроены в техническом профиле с самостоятельным подтверждением. Сообщения об ошибках можно локализовать.

Атрибут Обязательное поле Описание
UserMessageIfClaimsPrincipalAlreadyExists No Если вызывается ошибка (см. описание атрибута RaiseErrorIfClaimsPrincipalAlreadyExists), укажите сообщение, которое будет показано пользователю, если объект пользователя уже существует.
UserMessageIfClaimsPrincipalDoesNotExist No Если вызывается ошибка (см. описание атрибута RaiseErrorIfClaimsPrincipalDoesNotExist), укажите сообщение, которое будет показано пользователю, если объект пользователя не существует.

Следующие шаги

См. следующую статью, например использование технического профиля Microsoft Entra: