使用手机号通过Azure AD B2C注册未收验证码的问题咨询
问题分析与解决方案
核心原因
直接调用https://graph.microsoft.com/v1.0/users创建用户仅完成了用户实体的存储,Azure AD B2C不会自动触发验证码发送——用户流之所以能正常发验证码,是因为它包含了完整的身份验证交互逻辑(发起验证码请求、验证有效性),而Graph API仅负责用户数据管理,不涉及身份验证流程的触发。
解决方案步骤
1. 修正用户创建请求的格式问题
你的请求中identities里的手机号(+1 416-000-0000)与mobilePhone字段(+1 416 000 000)格式不一致且位数不符,需统一为E.164标准格式(无空格、无分隔符,如+14160000000),避免后续验证时出现匹配问题:
{ "accountEnabled": true, "displayName": "Test Name", "identities": [ { "signInType": "phoneNumber", "issuer": "testorg.onmicrosoft.com", "issuerAssignedId": "+14160000000" } ], "mobilePhone": "+14160000000", "passwordPolicies": "DisablePasswordExpiration", "passwordProfile": { "password": "82510f31-1c89-d103-73c8-9fbedda45dcc", "forceChangePasswordNextSignIn": false } }
2. 自定义注册/登录的验证码流程(无需用户流)
要实现自定义页面的验证码收发,需基于Azure AD B2C自定义策略对接官方验证码服务(不能自行发送验证码,否则无法与Azure AD B2C身份体系绑定):
- 注册流程:
- 自定义前端收集用户手机号,提交到你的后端接口。
- 后端通过修正后的Graph API请求创建用户。
- 调用Azure AD B2C自定义策略中的验证码发送端点,向用户手机号发送验证码。
- 前端收集用户输入的验证码,后端调用Azure AD B2C验证端点确认有效性,验证通过即完成注册。
- 登录流程:
- 自定义前端收集用户手机号,提交到后端接口。
- 后端调用Azure AD B2C验证码发送端点,向该手机号发送验证码。
- 前端收集验证码后,后端调用验证端点确认有效性,通过后获取Azure AD B2C的ID/访问令牌,完成登录。
3. 关键配置要点
- 确保Azure AD B2C已配置短信提供商(如Twilio、Azure通信服务),你之前用户流能正常收验证码,说明该配置已完成。
- 自定义策略中需包含手机号验证的技术配置,允许直接调用验证码收发逻辑,脱离预定义用户流的UI限制。
内容的提问来源于stack exchange,提问作者Sumchans
相关产品推荐
相关产品推荐

