Azure B2C:能否在ClaimsTransformation中使用Claims Resolvers?
能否在ClaimsTransformation中使用Claims Resolvers?
直接在ClaimsTransformation的InputClaim或InputParameter里使用Claims Resolvers(比如{Culture:LanguageCode})是不支持的——Claims Resolvers的解析逻辑仅在用户旅程/技术配置文件的顶层InputClaims中生效,ClaimsTransformation内部的输入只能依赖已存在的声明值。
不过可以通过以下间接方式实现动态生成语言相关的template_id:
步骤1:通过Claims Resolver获取语言代码声明
在调用ClaimsTransformation的技术配置文件(TechnicalProfile)中,添加InputClaim,用Claims Resolver把语言代码存入新声明:
<TechnicalProfile Id="YourTechnicalProfile"> <!-- 其他配置 --> <InputClaims> <InputClaim ClaimTypeReferenceId="email" /> <!-- 新增:将语言代码存入cultureLanguageCode声明 --> <InputClaim ClaimTypeReferenceId="cultureLanguageCode" DefaultValue="{Culture:LanguageCode}" /> </InputClaims> </TechnicalProfile>
步骤2:创建字符串拼接的ClaimsTransformation
新增转换,把固定前缀template-和语言代码声明拼接成最终的template_id值:
<ClaimsTransformations> <!-- 新增:拼接生成templateId --> <ClaimsTransformation Id="BuildTemplateId" TransformationMethod="FormatString"> <InputClaims> <InputClaim ClaimTypeReferenceId="cultureLanguageCode" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="stringFormat" DataType="string" Value="template-{0}" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="templateId" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> <!-- 修改后的GenerateRequest转换 --> <ClaimsTransformation Id="GenerateRequest" TransformationMethod="GenerateJson"> <InputClaims> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="email_address" /> <InputClaim ClaimTypeReferenceId="templateId" TransformationClaimType="template_id" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> </ClaimsTransformations>
步骤3:按顺序执行转换
在技术配置文件中确保先执行拼接转换,再执行生成JSON的转换:
<TechnicalProfile Id="YourTechnicalProfile"> <!-- 其他配置 --> <InputClaims> <!-- 步骤1的输入声明 --> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="emailRequestBody" /> </OutputClaims> <ClaimsTransformations> <ClaimsTransformationReference Id="BuildTemplateId" /> <ClaimsTransformationReference Id="GenerateRequest" /> </ClaimsTransformations> </TechnicalProfile>
原有配置失效原因
ClaimsTransformation内部InputClaim的DefaultValue不会触发Claims Resolvers的解析,只有在用户旅程或技术配置文件的顶层InputClaims/OutputClaims中设置的DefaultValue才会解析Claims Resolvers,因此必须先把解析后的值存入声明,再在后续转换中调用。
内容的提问来源于stack exchange,提问作者TimH
相关产品推荐
相关产品推荐

