如何通过Graph API或其他方式读写Azure B2C MFA电话号码
编程检索/修改Azure B2C账户MFA电话号码的实用方案
嘿,现在确实有比你提到的旧方案更直接可靠的办法了,我给你整理下目前最推荐的实现方式,都是基于微软现在主推的工具:
一、检索MFA电话号码
1. 优先用Microsoft Graph API(官方推荐)
这是当前最标准的方式,Azure B2C已经完全适配了Graph API的用户身份验证方法管理:
- 第一步得给你的应用注册配置权限:如果是管理员批量操作,需要
UserAuthenticationMethod.Read.All权限;如果是用户自己查自己的MFA号码,用委托权限UserAuthenticationMethod.Read就行,记得要在Azure B2C租户下完成应用注册并授予管理员同意(部分权限需要手动确认)。 - 调用
GET /users/{userId}/authentication/phoneMethods端点,就能拿到用户所有用于MFA的电话验证方法,返回结果里的phoneNumber就是你要找的号码,phoneType会标注是移动电话还是固定电话。 - 给你个PowerShell快速测试的例子:
# 连接到Graph,指定你的B2C租户ID Connect-MgGraph -TenantId "你的B2C租户ID" -Scopes "UserAuthenticationMethod.Read.All" # 查询指定用户的MFA电话方法 Get-MgUserAuthenticationPhoneMethod -UserId "用户的Object ID"
2. 旧版B2C Graph API(不推荐,仅兼容旧项目)
如果你的项目还在依赖旧的B2C Graph API,也能查到,但这个方式微软已经停止维护了,尽量迁移。MFA号码会存在扩展属性里,格式是extension_<你的B2C扩展应用客户端ID>_phoneNumber,调用用户详情端点就能拿到,但还是建议尽快转用上面的Graph API。
二、修改MFA电话号码
同样用Microsoft Graph API来操作,步骤很清晰:
- 权限需要
UserAuthenticationMethod.ReadWrite.All(管理员操作)或者UserAuthenticationMethod.ReadWrite(用户自助修改),同样要完成权限配置和同意。 - 操作分两步:先删掉旧的电话验证方法,再添加新号码:
- 删除旧方法:调用
DELETE /users/{userId}/authentication/phoneMethods/{phoneMethodId},这里的phoneMethodId可以从之前的查询结果里拿到。 - 添加新号码:调用
POST /users/{userId}/authentication/phoneMethods,请求体示例如下:
{ "phoneNumber": "+1234567890", "phoneType": "mobile" } - 删除旧方法:调用
- PowerShell示例:
# 删除旧的MFA电话方法,替换为实际的method ID和用户ID Remove-MgUserAuthenticationPhoneMethod -UserId "用户Object ID" -PhoneAuthenticationMethodId "旧方法的ID" # 添加新的MFA电话号码 New-MgUserAuthenticationPhoneMethod -UserId "用户Object ID" -PhoneNumber "+1987654321" -PhoneType "mobile"
几个关键提醒
- 一定要确保应用注册是在你的Azure B2C租户下创建的,跨租户的应用可能会有权限问题。
- 如果是做用户自助修改的场景,除了编程调用API,也可以直接集成Azure B2C的自定义用户流或者自助服务密码重置(SSPR)功能,让用户在前端界面自行修改,这样更符合用户习惯。
- 旧的Azure AD Graph API已经被弃用了,别再用了,微软后续不会再更新,容易出兼容性问题。
内容的提问来源于stack exchange,提问作者nat
相关产品推荐
相关产品推荐

