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

Примечание

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

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

Протокол

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

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

<TechnicalProfile Id="Facebook-OAUTH-UnLink">
    <DisplayName>Unlink Facebook</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  ...

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

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

<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="ageGroup" DefaultValue="Undefined" />
  <OutputClaim ClaimTypeReferenceId="ageGroupValueChanged" DefaultValue="false" />
</OutputClaims>

Преобразования исходящих утверждений

Элемент OutputClaimsTransformations может содержать коллекцию элементов OutputClaimsTransformation, которые используются для изменения или создания утверждений. Следующий технический профиль вызывает преобразование утверждений RemoveAlternativeSecurityIdByIdentityProvider. Это преобразование утверждений удаляет удостоверение социальной сети из коллекции AlternativeSecurityIds. Исходящие утверждения этого технического профиля — identityProvider2, которому задано значение facebook.com, и AlternativeSecurityIds, который содержит список удостоверений социальных сетей, связанный с данным пользователем, после удаления удостоверения facebook.com.

<ClaimsTransformations>
  <ClaimsTransformation Id="RemoveAlternativeSecurityIdByIdentityProvider"
TransformationMethod="RemoveAlternativeSecurityIdByIdentityProvider">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="IdentityProvider2"
TransformationClaimType="identityProvider" />
      <InputClaim ClaimTypeReferenceId="AlternativeSecurityIds"
TransformationClaimType="collection" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="AlternativeSecurityIds"
TransformationClaimType="collection" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>
...
<TechnicalProfile Id="Facebook-OAUTH-UnLink">
    <DisplayName>Unlink Facebook</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="identityProvider2" DefaultValue="facebook.com" AlwaysUseDefaultValue="true" />
    </OutputClaims>
    <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="RemoveAlternativeSecurityIdByIdentityProvider" />
    </OutputClaimsTransformations>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

Технический профиль преобразования утверждений позволяет выполнять преобразование утверждений на любом шаге оркестрации на пути взаимодействия пользователя. В следующем примере шаг оркестрации вызывает один из технических профилей с удаленной связью, такой как UnLink-Facebook-OAUTH. Этот технический профиль вызывает преобразование исходящих утверждений RemoveAlternativeSecurityIdByIdentityProvider, в результате чего создается новое утверждение AlternativeSecurityIds2. Исходящее утверждение содержит список пользовательских удостоверений социальных сетей при удалении удостоверения Facebook из коллекций.

<UserJourney Id="AccountUnLink">
  <OrchestrationSteps>
    ...
    <OrchestrationStep Order="8" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="UnLinkFacebookExchange" TechnicalProfileReferenceId="UnLink-Facebook-OAUTH" />
        <ClaimsExchange Id="UnLinkMicrosoftExchange" TechnicalProfileReferenceId="UnLink-Microsoft-OAUTH" />
        <ClaimsExchange Id="UnLinkGitHubExchange" TechnicalProfileReferenceId="UnLink-GitHub-OAUTH" />
      </ClaimsExchanges>
    </OrchestrationStep>
    ...
  </OrchestrationSteps>
</UserJourney>

Метаданные

attribute Обязательно Описание
IncludeClaimResolvingInClaimsHandling Нет Для входящих и исходящих утверждений указывает, включено ли разрешение утверждений в технический профиль. Возможные значения: true или false (по умолчанию). Если вы хотите использовать сопоставитель утверждений в техническом профиле, задайте для этих метаданных значение true.
ContentDefinitionReferenceId Нет Идентификатор определения содержимого, связанного с этим техническим профилем. Метаданные определения содержимого требуются для преобразований утверждений FormatLocalizedString, GetLocalizedStringsTransformation и GetMappedValueFromLocalizedCollection.

Использование технического профиля проверки

Технический профиль преобразования утверждений может использоваться для проверки информации. В следующем примере самоподтвержденный технический профиль с именем LocalAccountSignUpWithLogonEmail предлагает пользователю дважды ввести адрес электронной почты, а затем вызывает технический профиль проверки с именем Validate-Email для проверки адреса электронной почты. Технический профиль Validate-Email вызывает преобразование утверждений AssertEmailAreEqual для сравнения двух утверждений email и emailRepeat. Если они не равны в соответствии с указанным сравнением, он создает исключение.

<ClaimsTransformations>
  <ClaimsTransformation Id="AssertEmailAreEqual" TransformationMethod="AssertStringClaimsAreEqual">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim1" />
      <InputClaim ClaimTypeReferenceId="emailRepeat" TransformationClaimType="inputClaim2" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
    </InputParameters>
  </ClaimsTransformation>
</ClaimsTransformations>

Технический профиль преобразования утверждений вызывает преобразование утверждений AssertEmailAreEqual, которое подтверждает, что адреса электронной почты, предоставленные пользователем, одинаковы.

<TechnicalProfile Id="Validate-Email">
  <DisplayName>Unlink Facebook</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="emailRepeat" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertEmailAreEqual" />
  </OutputClaimsTransformations>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

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

<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
  <DisplayName>User ID signup</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    ...
    <Item Key="UserMessageIfClaimsTransformationStringsAreNotEqual">The email addresses you provided are not the same</Item>
  </Metadata>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" />
    <OutputClaim ClaimTypeReferenceId="emailRepeat" />
    ...
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="Validate-Email" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>