这是 Hari Krishna 在另一个线程上建议的,为此讨论打开一个新的 SO 线程。如何以编程方式清除或更新 Azure AD B2C MFA 的电话号码?
我们正在使用 B2C 自定义策略,其中包含将用户的 MFA 配置文件写回到 B2C 配置文件的步骤。B2C 技术配置文件名称是AAD-UserWritePhoneNumberUsingObjectId。
<!-- Save MFA phone number: The precondition verifies whether the user provided a new number in the
previous step. If so, then the phone number is stored in the directory for future authentication requests. -->
<OrchestrationStep Order="12" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>newPhoneNumberEntered</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AADUserWriteWithObjectId" TechnicalProfileReferenceId="AAD-UserWritePhoneNumberUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
当此值在用户->身份验证方法->电话下写回 B2C 时,它以 +12223334444 格式执行,国家代码和区号之间没有空格。B2C 接受此值,随后的 MFA 请求工作正常。
但是,当您使用https://graph.microsoft.com/beta/users/{userId}/authentication/phoneMethods下的 Graph API 方法管理 MFA 电话号码时,就会出现该错误。调用 GET 方法时,任何不是 +1 2223334444 格式的电话号码(这次注意国家代码和地区代码的空格)都会被忽略,结果是一个空数组。
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#users('{userId}')/authentication/phoneMethods",
"value": []
}
此外,无法删除该值。调用 DELETE https://graph.microsoft.com/beta/users/{userId}/authentication/phoneMethods/3179e48a-750b-4051-897c-87b9720928f7会导致 404 响应:
{
"error": {
"code": "resourceNotFound",
"message": "Unable to delete authentication method of the requested type with an id of [3179e48a-750b-4051-897c-87b9720928f7] because it was not found for the user.",
"innerError": {
"message": "Unable to delete authentication method of the requested type with an id of [3179e48a-750b-4051-897c-87b9720928f7] because it was not found for the user.",
"date": "2020-12-08T14:02:53",
"request-id": "eba02037-1884-4dce-9faf-ceb1e377975b",
"client-request-id": "eba02037-1884-4dce-9faf-ceb1e377975b"
}
}
}
有效的一件事是使用 PATCH 请求执行“幽灵更新”,然后执行随后的 DELETE 请求,这将导致一个空白电话号码,然后将再次提示用户在下一次输入他们的新电话号码B2C 登录尝试。见下文。
第 1 步 - 发出“幽灵更新”以将 MFA 电话号码设置为虚拟值。
发布https://graph.microsoft.com/beta/users/{userId}/authentication/phoneMethods
{
"phoneNumber": "+1 2223334444",
"phoneType": "mobile"
}
第 2 步 - 删除虚拟电话号码,现在允许使用,因为它的格式正确
DELETE https://graph.microsoft.com/beta/users/{userId}/authentication/phoneMethods/3179e48a-750b-4051-897c-87b9720928f7
这最终允许一个半合适的解决方法,因为它允许管理员清除旧电话号码,以便重新提示用户,但这绝对是一个错误,并阻止管理员查看现有电话号码以进行验证,结果在降低安全性。