如何调整Azure AD B2C自定义策略模板适配手机号+SMS MFA
适配手机号注册+SMS MFA场景的Azure AD B2C账户删除自定义策略
可以对原有的邮箱场景删除账户模板进行适配,以下是具体的修改方向和步骤:
1. 替换身份验证流程为手机号+SMS MFA
原模板基于邮箱登录验证身份,需要将用户旅程中的登录步骤替换为手机号验证+SMS MFA的流程:
- 移除原有的
LocalAccountSigninEmail相关技术配置,替换为支持手机号登录的PhoneFactor技术配置 - 在用户旅程中添加SMS MFA验证步骤,确保只有完成MFA的用户才能进入账户删除环节
2. 调整用户识别的声明逻辑
因为采用手机号注册,用户的核心标识是signInNames.phoneNumber声明,需要修改用户查找与匹配的逻辑:
- 在
<ClaimsProviders>的用户查找技术配置中,将UserIdentifierClaimType设置为signInNames.phoneNumber,替代原有的email声明 - 确保声明转换规则中,正确提取和传递手机号作为用户唯一标识
3. 更新UI提示文本
修改策略中的本地化资源,适配手机号场景的界面提示:
- 将页面中“输入邮箱”类的提示文本替换为“输入手机号”
- 调整MFA相关的提示文案,明确提示用户通过SMS验证码完成验证
4. 确保删除前的MFA校验逻辑
在用户旅程的步骤顺序中,严格执行“手机号登录 → SMS MFA验证 → 账户删除”的流程:
- 只有MFA验证成功的用户,才能触发后续的账户删除API调用
- 若MFA验证失败,直接终止流程并返回错误提示
5. 关键配置示例(核心片段)
修改用户旅程步骤
<UserJourney Id="DeleteMyAccount"> <OrchestrationSteps> <!-- 步骤1:手机号登录 --> <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <ClaimsProviderSelections> <ClaimsProviderSelection TargetClaimsExchangeId="PhoneFactorExchange" /> </ClaimsProviderSelections> </OrchestrationStep> <!-- 步骤2:SMS MFA验证 --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="PhoneFactorExchange" TechnicalProfileReferenceId="PhoneFactor-InputOrVerify" /> </ClaimsExchanges> </OrchestrationStep> <!-- 步骤3:执行账户删除 --> <OrchestrationStep Order="3" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserDeleteExchange" TechnicalProfileReferenceId="AAD-UserDelete" /> </ClaimsExchanges> </OrchestrationStep> <!-- 步骤4:返回删除成功结果 --> <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
更新用户查找技术配置
<TechnicalProfile Id="AAD-UserReadUsingPhoneNumber"> <Metadata> <Item Key="Operation">Read</Item> <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="signInNames.phoneNumber" PartnerClaimType="signInNames.phoneNumber" Required="true" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="signInNames.phoneNumber" /> </OutputClaims> <IncludeTechnicalProfile ReferenceId="AAD-Common" /> </TechnicalProfile>
内容的提问来源于stack exchange,提问作者Kasper Sommer
相关产品推荐
相关产品推荐

