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

Azure AD B2C问题:CopyClaim无法将值复制到SignInName

Azure AD B2C自定义策略:登录页无法预填只读邮箱问题解决

问题分析

你的配置中,登录技术配置文件SelfAsserted-LocalAccountSignin-Email的InputClaims部分对signInName设置了DefaultValue="{OIDC:LoginHint}"且AlwaysUseDefaultValue="true"。这个配置会覆盖之前通过InputClaimsTransformations复制过来的signInName值——因为InputClaims的处理顺序在InputClaimsTransformations之后,且AlwaysUseDefaultValue="true"会强制使用默认值,不管之前声明是否已有值。由于此时{OIDC:LoginHint}为空,最终signInName没有被赋值,导致登录页仍要求用户输入邮箱。

另外,需要确认signInName的声明类型(ClaimsSchema)已配置为只读,否则即使赋值成功,输入框也不会变成只读状态。

修复步骤

1. 修正登录技术配置文件的InputClaims

修改SelfAsserted-LocalAccountSignin-Email中的InputClaims,调整为使用已有的emailAddress声明作为默认值,且仅在无值时使用:

<InputClaims>
  <InputClaim ClaimTypeReferenceId="signInName" DefaultValue="{Claim:emailAddress}" AlwaysUseDefaultValue="false" />
</InputClaims>

或者直接去掉默认值配置(因为InputClaimsTransformations已经把emailAddress复制到signInName):

<InputClaims>
  <InputClaim ClaimTypeReferenceId="signInName" />
</InputClaims>

2. 确保signInName声明为只读

在ClaimsSchema中确认signInName的配置包含UserInputType="Readonly":

<ClaimType Id="signInName">
  <DisplayName>Email Address</DisplayName>
  <DataType>string</DataType>
  <UserInputType>Readonly</UserInputType>
</ClaimType>

3. 验证声明转换顺序

确保InputClaimsTransformations在InputClaims之前定义(你的现有配置已满足此要求,无需修改):

<InputClaimsTransformations>
  <InputClaimsTransformation ReferenceId="CopyOldUserEmailAddress" />
</InputClaimsTransformations>
<InputClaims>
  <!-- 修正后的InputClaims配置 -->
</InputClaims>

额外说明

注册页正常是因为注册技术配置文件没有类似的DefaultValue覆盖逻辑,所以CopyClaim的结果能正确传递到输入框。登录页的问题核心是默认值配置覆盖了已有声明值,而非安全限制。

内容的提问来源于stack exchange,提问作者TheGreatApe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:47:12