Azure AD B2C自定义策略拆分OrchestrationSteps实现注册分步验证流程
Azure AD B2C自定义策略拆分注册编排步骤实现分步验证方案
核心思路
把原本单步完成的注册流程拆分为2个独立的编排步骤(OrchestrationStep),第一步仅处理邮箱收集和验证码校验,验证通过后把合法邮箱写入声明上下文临时存储,第二步再加载剩余注册字段供用户填写,最后统一完成账号创建。
具体实现步骤
- 第一步:配置仅包含邮箱验证的页面和编排逻辑
- 声明类型新增邮箱类型的
signInName字段,配置验证控件关联Azure AD B2C自带的邮箱验证技术配置 - 新增内容定义
ContentDefinitionId="api.signup.emailonly",页面仅展示邮箱输入框、发送验证码按钮、验证码输入框三个控件 - 对应编排步骤类型设为
ClaimsExchange,关联的自断言技术配置文件仅输出验证通过的signInName声明,第一步验证通过的邮箱默认会存在于声明上下文里,不需要额外做持久化存储,只要技术配置文件正确输出声明即可 - 记得在该自断言技术配置文件的
<ValidationTechnicalProfiles>节加入自带的邮箱验证技术配置,确保验证码正确性校验生效
- 声明类型新增邮箱类型的
- 第二步:配置剩余注册信息收集的页面和编排逻辑
- 新增内容定义
ContentDefinitionId="api.signup.userinfo",包含姓名、密码、手机号等你需要的剩余注册字段,其中邮箱字段建议设为只读,禁止用户修改已经验证通过的邮箱 - 编排步骤同样为
ClaimsExchange,关联的自断言技术配置文件需要先从上下文中读取第一步输出的signInName声明作为输入声明 - 信息收集完成后调用
AAD-UserWriteUsingLogonEmail技术配置文件完成用户账号写入
- 新增内容定义
- 编排步骤顺序配置示例
把原本的单步注册替换为如下顺序即可:<OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="EmailVerificationExchange" TechnicalProfileReferenceId="SelfAsserted-EmailVerificationOnly" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="UserInfoCollectionExchange" TechnicalProfileReferenceId="SelfAsserted-CollectUserInfo" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserWriteExchange" TechnicalProfileReferenceId="AAD-UserWriteUsingLogonEmail" /> </ClaimsExchanges> </OrchestrationStep> <!-- 后续保持原有生成令牌的标准步骤即可 -->
注意事项
- 第一步的自断言技术配置文件需要设置
AllowGenerationOfClaimsWithNullValues为false,确保只有验证码验证通过、邮箱声明合法存在的情况下才能进入下一步 - 如果需要支持用户返回上一步修改邮箱,可以给第二步的自断言页面加上返回按钮的配置,回到第一步后用户需要重新验证邮箱
- 不要在第一步就执行账号写入操作,避免出现用户验证完邮箱但没完成后续注册,生成无效账号的情况
内容的提问来源于stack exchange,提问作者AAHN
相关产品推荐
相关产品推荐

