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

Примечание

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

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

Протокол

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

Согласно начальному пакету настраиваемых политик технические профили Azure AD включают в себя технический профиль AAD-Common. В технических профилях Azure AD протокол не указывается, так как он настроен в техническом профиле 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 содержит утверждение, которое используется для поиска учетной записи в каталоге или создания новой. В коллекции входных утверждений для всех технических профилей Azure AD должен содержаться ровно один элемент InputClaim. Возможно, вам потребуется сопоставить имя утверждения, определенное в вашей политике, с именем, определенным в Azure Active Directory.

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

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

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

OutputClaims

Элемент OutputClaims содержит список утверждений, возвращаемых техническим профилем Azure AD. Возможно, вам потребуется сопоставить имя утверждения, определенное в вашей политике, с именем, определенным в Azure Active Directory. Также можно включить утверждения, которые не возвращаются Azure Active Directory, если задан атрибут DefaultValue.

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

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

  • objectId — идентификатор новой учетной записи;
  • newUser — указывает, является ли пользователь новым;
  • authenticationSource — задает для проверки подлинности значение ;
  • 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 содержит все значения, которые должны сохраняться в Azure AD с возможными данными о сопоставлении между типом утверждения, уже определенным в разделе ClaimsSchema политики, и именем атрибута Azure AD.

Технический профиль 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>

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

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

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

Операции технического поставщика Azure AD

Чтение

Операция 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>

Метаданные

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

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

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

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

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

Пример использования технического профиля Azure AD см. в следующей статье: