Azure B2C自定义策略:FormatStringMultipleClaims空声明默认值配置问题
解决Azure B2C自定义策略中FormatStringMultipleClaims默认值配置问题
核心方案
FormatStringMultipleClaims本身不支持直接为输入声明设置默认值,需要通过前置声明转换先补全缺失的声明值,再传入该转换处理。
具体实现步骤
1. 定义补全默认值的声明转换
创建一个自定义转换,当surName声明为空或不存在时,自动填充默认值:
<ClaimsTransformation Id="AddDefaultSurNameIfMissing" TransformationMethod="AddItemToStringCollection"> <InputClaims> <InputClaim ClaimTypeReferenceId="surName" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="item" DataType="string" Value="Unknown" /> <InputParameter Id="checkExists" DataType="boolean" Value="true" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="surName" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
其中checkExists设为true,确保仅在声明缺失时才填充默认值,不会覆盖已有有效值。
2. 在用户旅程中先执行补全转换
在调用FormatStringMultipleClaims的步骤之前,先执行上述补全转换,保证surName总有值:
<OrchestrationStep Order="X" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="SetDefaultSurName" TechnicalProfileReferenceId="TP-SetDefaultClaims" /> </ClaimsExchanges> </OrchestrationStep>
对应的技术配置文件:
<TechnicalProfile Id="TP-SetDefaultClaims"> <DisplayName>Set default values for missing claims</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="surName" /> </OutputClaims> <ClaimsTransformations> <ClaimsTransformationReferenceId="AddDefaultSurNameIfMissing" /> </ClaimsTransformations> </TechnicalProfile>
3. 正常调用FormatStringMultipleClaims
此时surName已确保有值,直接使用该转换即可避免流程失败:
<ClaimsTransformation Id="FormatFullName" TransformationMethod="FormatStringMultipleClaims"> <InputClaims> <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1" /> <InputClaim ClaimTypeReferenceId="surName" TransformationClaimType="inputClaim2" /> </InputClaims> <InputParameters> <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
关键注意点
- 不要直接给
FormatStringMultipleClaims的InputClaim添加DefaultValue属性,该转换不支持此配置,会引发XML解析错误。 - 若需要为多个声明设置默认值,可复制上述补全转换结构,修改对应的声明类型和默认值即可。
内容的提问来源于stack exchange,提问作者366Cobra
相关产品推荐
相关产品推荐

