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

能否创建已知邮箱的Azure AD B2C自定义密码重置策略?

解决自定义策略中绕过密码重置邮箱验证的问题

我之前遇到过几乎一模一样的场景,咱们一步步来搞定这个问题——核心思路就是让自定义策略信任你传入的邮箱声明,跳过默认的邮箱验证流程,直接用这个已确认的邮箱来让用户设置密码。

1. 改造密码重置的用户旅程(UserJourney)

找到你自定义策略里负责密码重置的UserJourney(通常命名为PasswordReset),把里面原本要求用户输入邮箱并验证的步骤替换掉。比如原来的流程可能是:

SelfAsserted-LocalAccountPasswordReset → 发送验证邮件 → 验证邮件链接

你需要把这几步改成直接读取传入的email声明,不需要用户再输入或验证。具体来说,移除涉及邮箱输入和验证的步骤,直接跳转到设置密码的环节。

2. 把传入的邮箱标记为「已验证」

自定义策略默认只信任自己验证过的邮箱,所以你需要显式把令牌里的邮箱声明标记为已验证:

  • 先在策略的<ClaimsSchema>里添加一个verifiedEmail声明(如果还没有的话):
    <ClaimType Id="verifiedEmail">
      <DisplayName>Verified Email</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    
  • 然后添加一个声明转换,把传入的email转成已验证的邮箱:
    <ClaimsTransformation Id="MarkEmailAsVerified" TransformationMethod="AddItemToStringCollection">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="verifiedEmail" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    
  • 在处理令牌的TechnicalProfile(比如你用来接收签名令牌的那个Profile)里调用这个转换,确保邮箱被标记为已验证:
    <TechnicalProfile Id="JwtIssuer">
      <!-- 其他配置 -->
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="MarkEmailAsVerified" />
      </OutputClaimsTransformations>
    </TechnicalProfile>
    

3. 调整密码重置的TechnicalProfile,直接用已验证邮箱

找到负责写入密码的LocalAccountWritePasswordUsingObjectId TechnicalProfile,修改它的输入声明,确保使用已验证的邮箱:

<TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="objectId" />
    <InputClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password" />
    <!-- 添加这一行,用已验证的邮箱 -->
    <InputClaim ClaimTypeReferenceId="verifiedEmail" PartnerClaimType="email" />
  </InputClaims>
  <!-- 其他配置不变 -->
</TechnicalProfile>

4. 最后检查声明映射是否正确

虽然你说已经跟踪到策略拿到了邮箱声明,但还是要确认令牌里的声明名称和策略里的ClaimType Id完全一致——比如令牌里是email,策略里也得是email,不能写成userEmail或者upn(除非你特意做了映射)。

做完这些调整后,用户点击邀请链接时,策略会直接跳过邮箱验证,进入设置密码的页面,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:05:26