如何在Azure AD B2C中启用邮箱验证?自定义策略场景求助
在Azure AD B2C自定义策略中启用邮箱验证的正确步骤
我懂你之前尝试反向工程内置策略来搞定邮箱验证的思路,但大概率是配置细节没踩对——毕竟自定义策略的坑不少。下面给你梳理一套能成功启用邮箱验证的正确步骤:
定位目标自断言技术配置文件
首先找到你自定义策略里负责用户输入(比如注册流程的SelfAsserted-LocalAccountSignUp,或者你自定义的类似ID)的自断言技术配置文件,这是我们要修改的核心节点。添加/启用邮箱验证元数据
你之前测试的是禁用邮箱验证的配置(EnforceEmailVerification="False"),要启用的话,得把这个元数据项的值改成True,放到目标TP的<Metadata>节点里:<TechnicalProfile Id="SelfAsserted-LocalAccountSignUp"> <Metadata> <!-- 保留你原有的其他元数据项 --> <Item Key="EnforceEmailVerification">True</Item> </Metadata> <!-- 其他InputClaims、OutputClaims等配置保持不变 --> </TechnicalProfile>确保邮箱声明配置正确
别忽略声明的基础配置,要保证你的策略里有正确的email声明定义,并且在自断言TP里引用了它:- 声明定义(通常在
<BuildingBlocks>的<ClaimsSchema>里):<ClaimType Id="email"> <DisplayName>Email Address</DisplayName> <DataType>string</DataType> <UserHelpText>Enter your email address</UserHelpText> <UserInputType>TextBox</UserInputType> <Restriction> <Pattern RegularExpression="^[a-zA-Z0-9.!#$%&'^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" HelpText="Please enter a valid email address." /> </Restriction> </ClaimType> - 在自断言TP的
<InputClaims>里引用这个声明:<InputClaims> <InputClaim ClaimTypeReferenceId="email" /> </InputClaims>
- 声明定义(通常在
检查依赖的后端技术配置文件
自断言TP通常会依赖一个负责写入用户数据的后端TP(比如AAD-UserWriteUsingLogonEmail),确保这个TP的<PersistedClaims>里包含了email声明,并且没有覆盖邮箱验证的逻辑:<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail"> <PersistedClaims> <PersistedClaim ClaimTypeReferenceId="email" /> <!-- 其他要保存的声明 --> </PersistedClaims> </TechnicalProfile>测试策略
保存修改后的自定义策略,上传到Azure AD B2C租户,然后测试对应的流程(比如注册)。此时用户输入邮箱后,应该会收到验证邮件,必须点击验证链接完成验证,才能继续后续流程。
如果是在密码重置等其他流程里启用邮箱验证,逻辑完全一致——找到对应流程的自断言TP,添加EnforceEmailVerification="True"的元数据即可。
内容的提问来源于stack exchange,提问作者spottedmahn
相关产品推荐
相关产品推荐

