如何在Azure AD B2C策略中保留邮箱地址中的加号
解决OIDC LoginHint中邮箱加号被替换为空格的问题
问题根源:URL的application/x-www-form-urlencoded编码规范中,+会被默认解码为空格,导致传递的test+aaa@test.com被解析成test aaa@test.com。
提供两种解决方法:
方法一:前端传递前编码加号
将注册链接中的+替换为URL编码值%2B,即把:
&login_hint=test+aaa@test.com
修改为:
&login_hint=test%2Baaa@test.com
这样策略中通过{OIDC:LoginHint}获取的值会自动解码为test+aaa@test.com,无需修改策略配置。
方法二:在B2C策略中添加转换规则
如果无法修改前端传递逻辑,可在策略中添加声明转换,将空格替换回+:
- 定义声明转换规则
在策略的<ClaimsTransformations>节点下添加以下配置:
<ClaimsTransformation Id="ReplaceSpaceWithPlus" TransformationMethod="ReplaceClaimValue"> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="oldValue" DataType="string" Value=" " /> <InputParameter Id="newValue" DataType="string" Value="+" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
- 在对应技术配置文件中引用该转换
找到配置InputClaims的<TechnicalProfile>节点,添加<InputClaimsTransformations>配置:
<TechnicalProfile Id="你的技术配置文件ID"> <!-- 原有输入声明配置 --> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" AlwaysUseDefaultValue="true" DefaultValue="{OIDC:LoginHint}" /> </InputClaims> <!-- 添加声明转换 --> <InputClaimsTransformations> <InputClaimsTransformation ReferenceId="ReplaceSpaceWithPlus" /> </InputClaimsTransformations> <!-- 其他原有配置 --> </TechnicalProfile>
内容的提问来源于stack exchange,提问作者Abe
相关产品推荐
相关产品推荐

