次の方法で共有


Azure Active Directory B2C カスタム ポリシーで要求変換技術プロファイルを定義する

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。

要求変換技術プロファイルを使用すると、出力要求変換を呼び出して要求値を操作したり、要求を検証したり、一連の出力要求の既定値を設定したりできます。

プロトコル

Protocol 要素の Name 属性は Proprietary に設定する必要があります。 ハンドラー属性には、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 要素は必須です。 技術プロファイルによって返される出力要求を少なくとも 1 つ指定します。 次の例は、出力要求で既定値を設定する方法を示しています。

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

出力要求変換

OutputClaimsTransformations 要素には、要求の変更や新しい要求の生成に使用される OutputClaimsTransformation 要素のコレクションを含めることができます。 次の技術プロファイルは、 RemoveAlternativeSecurityIdByIdentityProvider 要求変換を呼び出します。 この要求変換により、 AlternativeSecurityIds のコレクションからソーシャル ID が削除されます。 この技術プロファイルの出力要求は、に設定されている facebook.com と、ID が削除された後にこのユーザーに関連付けられているソーシャル ID の一覧を含む 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 ID を削除しながら、ユーザーのソーシャル ID の一覧が含まれています。

<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>

メタデータ

特性 必須 説明
IncludeClaimResolvingInClaimsHandling いいえ 入力と出力の要求について、要求の解決を技術プロファイルに含めるかどうかを指定します。 指定できる値: true または false (既定値)。 技術プロファイルでクレーム リゾルバーを使用する場合は、このメタデータを true に設定します。
コンテンツ定義参照ID いいえ この技術プロファイルに関連付けられている コンテンツ定義 の識別子。 コンテンツ定義メタデータは、 FormatLocalizedStringGetLocalizedStringsTransformationおよび GetMappedValueFromLocalizedCollection 要求変換に必要です。

検証技術プロファイルを使用する

要求変換技術プロファイルを使用して、情報を検証できます。 次の例では、LocalAccountSignUpWithLogonEmail という名前のセルフ アサート技術プロファイルが、電子メールを 2 回入力するようにユーザーに要求し、Validate-Email という名前の検証技術プロファイルを呼び出して電子メールを検証します。 Validate-Email 技術プロファイルは、要求変換 AssertEmailAreEqual を呼び出して 2 つの要求電子メール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>