如何实现Azure AD B2C IEF登录流程的一次性邮箱OTP验证功能
Azure AD B2C 首次登录OTP验证配置修复方案
你遇到的预填充邮箱与显示OTP按钮不可兼得的问题,是B2C自断言技术配置文件的声明映射规则导致的,Verified.Email是B2C内置的特殊声明标记,只有绑定了该标记的声明才会触发邮箱验证控件渲染,同时需要明确配置输入映射才能继承上一步的邮箱值。
具体修改步骤
- 调整
AAD-EmailVerification技术配置文件的元数据、输入输出声明,修改后的完整配置如下:
<TechnicalProfile Id="AAD-EmailVerification"> <DisplayName>Email Address OTP Verification</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item> <Item Key="language.button_continue">Continue</Item> <Item Key="setting.showCancelButton">False</Item> <!-- 允许预填充输入的邮箱并自动关联到验证控件 --> <Item Key="AllowGenerationOfVerificationCodeForInputEmail">true</Item> <!-- 强制启用邮箱验证逻辑 --> <Item Key="EnforceEmailVerification">true</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> </CryptographicKeys> <IncludeInSso>false</IncludeInSso> <InputClaims> <!-- 新增PartnerClaimType,将上一步传入的email声明绑定到内置验证控件的输入值 --> <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" /> </InputClaims> <OutputClaims> <!-- 保留该配置,触发验证控件渲染,验证通过后将值写回email声明 --> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" /> </OutputClaims> <!-- 移除多余的用户查询步骤,避免覆盖上一步已经获取的extension_EmailVerified声明 --> <ValidationTechnicalProfiles> </ValidationTechnicalProfiles> </TechnicalProfile>
- 可选优化:在现有步骤3之后新增强制重置密码的编排步骤,设置预条件为
extension_EmailVerified刚从false更新为true,即可满足首次登录OTP验证后强制改密码的需求。
配置说明
Verified.Email是B2C内置的特殊声明标识,并非冗余配置:输入声明中绑定该值代表将已有邮箱值传入验证控件实现预填充,输出声明中绑定该值代表要求B2C渲染带OTP发送按钮的验证控件,验证通过后才允许提交。调整后流程可以同时满足:首次登录OTP验证+后续登录跳过验证、邮箱预填充+OTP按钮显示两个核心需求。
内容的提问来源于stack exchange,提问作者phazlett
相关产品推荐
相关产品推荐

