你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
注释
在 Azure Active Directory B2C 中,自定义策略 主要用于解决复杂场景。 对于大多数场景,我们建议您使用内置的用户流。 如果未这样做,请通过 Active Directory B2C 中的自定义策略入门来了解自定义策略初学者包。
通过声明转换技术配置文件,可以调用输出声明转换来作声明值、验证声明或设置一组输出声明的默认值。
协议
“Protocol”元素的“Name”属性必须设置为 。
处理程序属性必须包含 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“AlternativeSecurityId”,后者包含删除 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>
元数据
| 特征 | 必选 | DESCRIPTION |
|---|---|---|
| IncludeClaimResolvingInClaimsHandling | 否 | 对于输入和输出声明,指定声明 解析 是否包含在技术配置文件中。 可能的值:true 或 false(默认值)。 如果要在技术配置文件中使用声明解析程序,请将此元数据设置为 true。 |
| ContentDefinitionReferenceId | 否 | 与此技术配置文件关联的 内容定义的 标识符。 FormatLocalizedString、GetLocalizedStringsTransformation 和 GetMappedValueFromLocalizedCollection 声明转换需要内容定义元数据。 |
使用验证技术配置文件
声明转换技术配置文件可用于验证信息。 在以下示例中,名为 LocalAccountSignUpWithLogonEmail 的自断言技术配置文件要求用户输入电子邮件两次,然后调用名为 Validate-Email 的验证技术配置文件来验证电子邮件。 Validate-Email 技术配置文件调用声明转换 AssertEmailAreEqual 来比较两个声明电子邮件和 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>