【问题标题】:Dealing with Azure AD MFA via REST APIs通过 REST API 处理 Azure AD MFA
【发布时间】:2021-08-31 21:31:01
【问题描述】:

我正在开发一个集成解决方案,我将使用图形 API 在 Azure AD 中创建用户。问题是客户已强制执行 MFA,我们无法进行任何手动干预,因为我们的集成解决方案的目标是通过服务器-服务器调用自动创建用户。有人有解决这个问题的方法吗?我可以看到 MFA 的 3 个选项 - 电子邮件、电话 (SMS) 和微软身份验证器。前两个无法集成 AFAIK,最后一个看起来可能,但恕我直言,也没有 API。

我的自动化执行以下操作:

  1. 发布到https://login.microsoftonline.com/organizations/oauth2/v2.0/token,并提供以下详细信息:

标题

x-www-form-urlencoded

身体

client_id xx9x9xxx00xxxxxx 范围 Directory.ReadWrite.All client_secret sdvds8vdsvsc8sd 用户名 user.name@tenant.onmicrosoft.com 密码 $@#%#%#%#%#% grant_type 密码

没有 MFA,一切都可以完美运行,即在没有 MFA 的另一个帐户上(我自己的帐户,而不是客户)。

这是我得到的错误:

{ “错误”:“invalid_grant”, "error_description": "AADSTS50076:由于您的管理员进行了配置更改,或者因为您移动到了新位置,您必须使用多重身份验证来访问“00000003-0000-0000-c000-000000000000”。\r\ n跟踪 ID:a05be65f-5bd7-4db0-9896-5a8907d10a00\r\n相关 ID:34454b92-46da-46b5-8ccf-8f07325ea8ff\r\n时间戳:2021-06-16 04:18:43Z", “错误代码”:[ 50076 ], "时间戳": "2021-06-16 04:18:43Z", “trace_id”:“a05be65f-5bd7-4db0-9896-5a8907d10a00”, “correlation_id”:“34454b92-46da-46b5-8ccf-8f07325ea8ff”, "error_uri": "https://login.microsoftonline.com/error?code=50076", “子错误”:“基本动作” }

任何人都可以就如何克服这个问题提出任何变通办法、解决方案或建议吗?

【问题讨论】:

    标签: azure azure-ad-graph-api


    【解决方案1】:

    您正在使用Azure AD ROPC flow 获取令牌,如果用户帐户启用了 MFA,您将无法使用它。

    如果您想通过启用 MFA 的帐户获取令牌,您可以使用 auth code flow,这是一种交互方式。如果你想要一种非交互的方式,你可以使用client credential flow,它可以在没有用户帐户的情况下获取令牌。

    【讨论】:

    • 对迟到的回复表示歉意。谢谢您的建议。我也尝试过,但在我最初的帖子中遇到了上面提到的相同错误。您能否告知是否需要为此设置任何特定的配置参数?
    【解决方案2】:

    您自己的帐户 AAD 已成功运行,因为您是管理员,您肯定满足在 AAD 中设置的访问策略,但对于您客户的帐户,他们的 AAD 已由管理员设置,您需要满足所有条件才能登录.

    此外,在 AAD 中,如果您在一个位置进行初始登录,然后从另一个位置登录,则 AD 上存在将其标记为“风险活动”的条件。

    因此,对于您的帐户,可以设置一个“已移至新位置”标志,自动触发对 MFA 的需求。如果您确实遇到这种情况,请检查 Azure 中的条件访问位置,并查看您的 AAD 管理员是否可以清除该标志。 (或设置原账号,指定位置。)。请查找参考文档here

    解决此问题的另一种方法是,用户必须在与他们尝试访问的服务的访问策略相匹配的条件下登录 Flow 门户(例如多因素、公司网络等) ,然后修复或重新创建连接。 请找到参考文档here

    更新:

    条件访问策略可防止非交互式流程发挥作用。这包括 Windows 集成身份验证和资源所有者密码凭据流。

    可能的解决方案...

    1. 改用交互式流程。
    2. 如果您使用的是交互式流程,但仍然出现此错误, 确保 openid 是交互式登录期间的范围之一。 您可能会在交互式登录后收到错误消息,并且 尝试用授权码交换访问令牌。
    https://login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/authorize
    ?client_id=########-####-####-####-############
    &response_type=code
    &scope=openid groups.read.all
    &nonce=1234
    &redirect_uri=https://app.contoso.com
    
    1. 将客户端应用程序添加到条件异常列表中 访问政策
    2. 将用户添加到条件访问策略的例外列表中
    3. 如果不使用条件访问策略并且用户直接 为 MFA 启用,然后作为最后的手段,为用户禁用 MFA,如果 上述解决方案(特别是解决方案#1和#2)不适用于 你。

    【讨论】:

    • 不幸的是同样的错误。 Azure 托管标识/服务主体会以任何方式提供帮助吗?知道如何设置和使用它们吗?
    • @NimishGoray,我已经用其他可能的解决方案更新了答案。如果他们有帮助,请告诉我。
    • 亲爱的 Ansuman,很遗憾我陷入了泥潭,我既不能进行交互式会话,也不能绕过 MFA。目前,我听从了您的建议,但管理员给了我 15 天的时间来解决我的问题。
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2020-07-05
    • 2021-02-22
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多