如何移除Azure AD B2C ID令牌中自定义属性的extension前缀?
如何移除Azure AD B2C ID令牌中自定义属性的"extension"前缀?
是的,通过自定义策略可以实现这个需求,核心思路是利用**声明转换(Claims Transformation)**将带前缀的自定义属性值复制到新的声明中,然后在ID令牌里输出这个新声明。具体步骤如下:
1. 定义新的目标声明
在自定义策略的<ClaimsSchema>节点下,添加一个和原自定义属性类型一致的新声明,比如要把extension_sampledata改成sampledata,就添加:
<ClaimType Id="sampledata"> <DisplayName>Sample Data</DisplayName> <DataType>string</DataType> <!-- 类型需和extension_sampledata保持一致,比如string、boolean等 --> </ClaimType>
2. 添加声明转换规则
在<ClaimsTransformations>节点下,添加复制声明值的转换规则,把原属性的值赋值给新声明:
<ClaimsTransformation Id="CopyExtensionSampledataToSampledata" TransformationMethod="CopyClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="extension_sampledata" TransformationClaimType="inputClaim" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="sampledata" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
3. 在用户旅程的技术配置文件中应用转换
找到读取用户属性的技术配置文件(比如AAD-UserReadUsingObjectId或自定义读取配置文件),在<OutputClaimsTransformations>节点下添加上述转换规则,确保获取到extension_sampledata后执行转换:
<TechnicalProfile Id="AAD-UserReadUsingObjectId"> <!-- 原有配置保持不变 --> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CopyExtensionSampledataToSampledata" /> </OutputClaimsTransformations> </TechnicalProfile>
4. 在RelyingParty中输出新声明
最后,在<RelyingParty>节点的<OutputClaims>里,移除原来的extension_sampledata,添加新的sampledata声明:
<RelyingParty> <DefaultUserJourney ReferenceId="SignUpOrSignIn" /> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <!-- 其他保留的声明 --> <OutputClaim ClaimTypeReferenceId="sampledata" /> <!-- 输出不带前缀的声明 --> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile> </RelyingParty>
完成以上配置后重新发布自定义策略,用户登录后获取的ID令牌里就会出现不带extension前缀的sampledata属性,原带前缀的属性不会被输出(除非特意保留)。
内容的提问来源于stack exchange,提问作者opqrshun
相关产品推荐
相关产品推荐

