You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除/重置Azure AD B2C用户的MFA选项?

问题背景

我们当前使用Custom Policies管理注册/登录、重置密码的用户流程,已启用MFA Phone/SMS选项。流程是先通过User Flow配置,再导出为Custom Policy以满足OOTB User Flow无法实现的需求。

现在需要为应用添加用户重置MFA选项的功能:在用户个人资料页设置按钮,内部调用MS Graph API的GET /users/{id}/authentication/phoneMethods接口获取数据,再调用DELETE /users/{id}/authentication/phoneMethods/{id}接口移除,让用户下次登录时重新添加MFA选项。

但遇到以下问题:调用上述GET接口返回空结果,调用GET /users/{id}/authentication/methods仅返回密码认证方式。经查,默认Azure AD B2C MFA实现将数据写入“旧认证方法”界面,此前微软官方回复暂无解决办法,距该回复已过去约8个月,现咨询两个问题:

  1. 是否可修改Custom Policy,将手机号写入“新认证方法”以支持原方案?测试显示在国家码与手机号间加空格可生效,但我们不熟悉Custom Policy配置。
  2. 是否可通过MS Graph API读取Azure AD B2C的“旧认证方法”数据?

注:已验证StackOverflow提到的临时方案(POST虚拟MFA手机号再DELETE)有效,但仍希望获得正规解决方案。


解答

问题1:修改Custom Policy将手机号写入新认证方法

可以通过自定义策略的声明转换(Claims Transformation)和技术配置文件(Technical Profile)实现,核心是确保存储的手机号格式符合新认证方法的要求(国家码与手机号间加空格),具体步骤如下:

  1. 添加声明转换规则处理手机号格式
    在自定义策略的<ClaimsTransformations>节点下,添加转换规则为国家码和手机号插入空格:
<ClaimsTransformation Id="FormatPhoneNumberForNewAuthMethod" TransformationMethod="FormatStringClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="formattedPhoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

同时需确保策略中已定义countryCode、phoneNumber、formattedPhoneNumber这几个声明类型(ClaimType)。

  1. 修改MFA注册的技术配置文件
    找到负责MFA手机号注册的自断言页面技术配置文件(如SelfAsserted-LocalAccountSignUpWithLogonEmail),在其<OutputClaimsTransformations>中添加上述转换规则,确保存储到目录的是格式化后的手机号:
<OutputClaimsTransformations>
  <OutputClaimsTransformation ReferenceId="FormatPhoneNumberForNewAuthMethod" />
</OutputClaimsTransformations>

另外,更新存储用户数据的技术配置文件(如AAD-UserWriteUsingLogonEmail),将formattedPhoneNumber作为mobile或otherMobile属性写入目录(根据业务需求选择对应属性)。

  1. 测试验证
    部署修改后的Custom Policy,让用户重新注册或更新MFA手机号,之后调用GET /users/{id}/authentication/phoneMethods接口,即可返回正确的手机号数据,此时可正常调用DELETE接口重置MFA。

问题2:通过MS Graph API读取旧认证方法数据

目前Azure AD B2C的“旧认证方法”(传统MFA存储的手机号)无法通过MS Graph API直接读取,微软官方尚未开放对应接口权限。即使距离此前的官方回复已过去8个月,当前官方文档仍未提及相关支持,因此暂时没有正规的Graph API途径获取这部分数据。

补充说明

你提到的临时方案(POST虚拟手机号再DELETE)虽能绕开读取问题,但存在操作冗余。若优先考虑正规方案,建议采用问题1中的Custom Policy修改方案,从根源上让MFA数据存储到新认证方法体系中,后续的Graph API操作即可完全符合预期。

内容的提问来源于stack exchange,提问作者Kiran Ramaswamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:33:31