You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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策略中添加转换规则

如果无法修改前端传递逻辑,可在策略中添加声明转换,将空格替换回+:

  1. 定义声明转换规则
    在策略的<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>
  1. 在对应技术配置文件中引用该转换
    找到配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:46:03