Azure AD B2C自定义策略跳过手机号OTP验证步骤实现方法
Azure AD B2C 手机号OTP认证流程自动化测试跳过验证实现方案
不要直接修改生产环境使用的正式策略,建议单独创建一套仅用于测试环境的自定义策略(比如命名为B2C_1A_PH_SUSI_TEST),所有跳过逻辑只在测试策略里生效,避免影响线上认证安全。
具体实现步骤
你现有配置里Order=2的编排步骤就是OTP短信验证环节,默认仅当存在isActiveMFASession声明时才会跳过,我们只需要给这个步骤加测试专属的跳过判断,同时补全OTP验证通过后流程依赖的声明即可。
- 首先在测试策略的
ClaimsSchema节点下新增一个测试专用的布尔声明,用来标识当前是自动化测试场景:
<ClaimType Id="skipOTPForTest"> <DisplayName>Flag to skip OTP for automation test</DisplayName> <DataType>boolean</DataType> </ClaimType>
- 修改PhoneSignInUp用户旅程中Order=2的OTP验证步骤,在
Preconditions块里新增一条前置规则:当skipOTPForTest值为True时,直接跳过当前OTP验证步骤:
<OrchestrationStep Order="2" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>isActiveMFASession</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> <!-- 新增测试场景跳过OTP规则 --> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>skipOTPForTest</Value> <Value>True</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="PhoneFactor-Verify" TechnicalProfileReferenceId="PhoneFactor-InputOrVerify-PhoneLogon" /> </ClaimsExchanges> </OrchestrationStep>
- 补全验证通过的依赖声明:OTP步骤正常执行完会写入
newPhoneNumberVerified(标识手机号已验证)、verifiedPhoneNumber(已验证的手机号值)两个核心声明,你需要修改第一步引用的SelfAsserted-LocalAccountSignin-Username自断言技术配置文件,在输出声明里增加测试场景的默认值逻辑:当skipOTPForTest为True时,自动把newPhoneNumberVerified设为True,把用户输入的手机号直接赋值给verifiedPhoneNumber,完全模拟OTP验证通过后的声明状态,不会影响后续新用户写入、签发JWT的流程。
可选替代方案
如果不想改动用户旅程的编排逻辑,也可以新建一个测试专用的PhoneFactor技术配置文件,继承生产用的PhoneFactor-InputOrVerify-PhoneLogon配置,移除实际发送短信、校验验证码的逻辑,直接返回验证通过的声明,再把测试策略里Order=2步骤引用的技术配置文件ID换成这个测试专用版本即可。
安全提醒:这套跳过逻辑严禁部署到生产环境,测试策略仅对自动化测试使用的应用客户端开放,
skipOTPForTest标识只能由测试后端在发起认证请求时通过测试专用的声明提供方传入,不要给普通用户开放传入该标识的入口。建议给自动化测试生成的测试账号加统一标识,定期清理目录里的测试数据。
内容的提问来源于stack exchange,提问作者Karunakaran
相关产品推荐
相关产品推荐

