0

这是 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

这最终允许一个半合适的解决方法,因为它允许管理员清除旧电话号码,以便重新提示用户,但这绝对是一个错误,并阻止管理员查看现有电话号码以进行验证,结果在降低安全性。

4

0 回答 0