Azure Active Directory B2C カスタム ポリシーで要求変換技術プロファイルを定義する
注意
Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。
要求変換技術プロファイルにより、出力要求変換を呼び出して、要求の値を操作したり、要求を検証したり、一連の出力要求の既定値を設定することができます。
Protocol
Protocol 要素の Name 属性は 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 要素は必須です。 技術プロファイルにより返される出力要求を少なくとも 1 つ指定します。 次の例は、出力要求で既定値を設定する方法を示しています。
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="ageGroup" DefaultValue="Undefined" />
<OutputClaim ClaimTypeReferenceId="ageGroupValueChanged" DefaultValue="false" />
</OutputClaims>
出力要求変換
OutputClaimsTransformations 要素には、要求を修正したり新しい要求を生成したりするために使用される OutputClaimsTransformation 要素のコレクションが存在する場合があります。 次の技術プロファイルは、RemoveAlternativeSecurityIdByIdentityProvider 要求変換を呼び出します。 この要求変換は、AlternativeSecurityIds のコレクションからソーシャル ID を削除します。 この技術プロファイルの出力要求は、facebook.com
に設定されている identityProvider2、および facebook.com ID の削除後にこのユーザーに関連付けられたソーシャル ID のリストが存在する AlternativeSecurityIds です。
<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>
要求変換技術プロファイルにより、任意のユーザー体験のオーケストレーション手順から、要求変換を実行できます。 次の例では、オーケストレーション手順は、Facebook-OAUTH のリンク解除 などの、いずれかのリンク解除技術プロファイルを呼び出します。 この技術プロファイルでは、新しい AlternativeSecurityIds2 要求を生成する RemoveAlternativeSecurityIdByIdentityProvider 要求変換が呼び出されます。 出力要求にはユーザーのソーシャル ID の一覧が含まれており、同時にコレクションから Facebook 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>
Metadata
属性 | 必須 | 説明 |
---|---|---|
IncludeClaimResolvingInClaimsHandling | いいえ | 入力と出力の要求について、要求の解決を技術プロファイルに含めるかどうかを指定します。 指定できる値: true または false (既定値)。 技術プロファイルで要求リゾルバーを使用する場合は、このメタデータを true に設定します。 |
ContentDefinitionReferenceId | No | コンテンツ定義の識別子は、この技術プロファイルに関連付けられています。 コンテンツ定義のメタデータは、FormatLocalizedString、GetLocalizedStringsTransformation、GetMappedValueFromLocalizedCollection 要求の変換に必要です。 |
検証技術プロファイルの使用
要求変換技術プロファイルを使用すれば、情報を検証できます。 次の例では、LocalAccountSignUpWithLogonEmail という名前の自己宣言された技術プロファイルが、ユーザーにメールを 2 回入力するように依頼してから、Validate-Email という名前の検証技術プロファイルを呼び出して、メールを検証しています。 Validate-Email 技術プロファイルは、要求変換 AssertEmailAreEqual を呼び出して、email と emailRepeat の 2 つの要求を比較し、指定された比較により等しくない場合は、例外をスローします。
<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>