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

添加ValidationTechnicalProfile后密码重置流程邮箱验证UI消失问题排查

问题根源分析
  1. REST技术配置文件输入Claim与重置流程逻辑冲突
    你的REST-UserMigration-LocalAccount-LoalAccountUserExsist技术配置文件要求输入signInName和password,但密码重置第一步是邮箱验证环节,用户处于“忘记密码”状态,既不会提供原有密码,当前SelfAsserted技术配置文件也仅收集并验证email,无法提供这两个Claim。

  2. SelfAsserted Provider自动收集逻辑打乱原有流程
    SelfAsserted Attribute Provider会自动检测ValidationTechnicalProfiles中所有技术配置文件的输入需求,当发现缺失password时,会直接显示密码输入框以收集该Claim,跳过了原本的邮箱验证步骤,导致UI异常。

  3. 迁移时机不符合重置流程场景
    密码重置的核心逻辑是先验证用户邮箱合法性,再允许设置新密码,你的REST迁移接口要求输入密码,完全违背了“忘记密码”场景下用户无法提供原密码的基本逻辑。

修正方案

1. 修改REST技术配置文件的输入输出

调整输入Claim为当前流程已有的email,移除不需要的password输入,清理与重置流程无关的输出Claim:

<TechnicalProfile Id="REST-UserMigration-LocalAccount-LoalAccountUserExsist">
    <DisplayName>Migrate user password flow</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="ServiceUrl">https://somefunctapp-rest-api.azurewebsites.net/api/MigrateIfExists?code=ugqr4ESgMENWlRdILvuOWkksuLy-zoPm76stOuiHFtzFAzzuiHFKcw==</Item>
        <Item Key="AuthenticationType">None</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AllowInsecureAuthInProduction">True</Item>
    </Metadata>
    <InputClaims>
        <!-- 替换为当前流程已收集的email Claim,映射为接口需要的signInName -->
        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInName" />
        <!-- 移除password输入,重置流程第一步无密码 -->
    </InputClaims>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="migrationRequired" />
        <OutputClaim ClaimTypeReferenceId="email" />
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surName" />
        <OutputClaim ClaimTypeReferenceId="sub" PartnerClaimType="userId" />
        <!-- 移除newPassword输出,用户将自行设置新密码 -->
        <OutputClaim ClaimTypeReferenceId="trueValue" DefaultValue="true"/>
    </OutputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

2. 调整ValidationTechnicalProfiles的执行顺序

先执行AAD-UserReadUsingEmailAddress检查用户是否已存在于B2C,若不存在再执行REST迁移,确保迁移仅针对未在B2C中的用户:

<ValidationTechnicalProfiles>
    <!-- 先检查B2C中是否存在用户 -->
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress"/>        
    <!-- 再执行迁移(需配合REST接口逻辑,仅当用户不存在时处理) -->
    <ValidationTechnicalProfile ReferenceId="REST-UserMigration-LocalAccount-LoalAccountUserExsist"/>    
</ValidationTechnicalProfiles>

3. 适配REST接口逻辑

将MigrateIfExists接口调整为:仅通过邮箱查询旧系统是否存在用户,若存在则将用户基础信息迁移到B2C,无需接收密码参数。迁移完成后返回用户信息,供后续密码重置步骤使用。

4. 确保邮箱验证步骤正常触发

确认LocalAccountDiscoveryUsingEmailAddress-Migration的OutputClaims中,email标记为Required=true且PartnerClaimType="Verified.Email",保证邮箱验证流程正常执行:

<OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />                   
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" />            
</OutputClaims>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:55:20