【问题标题】:Azure active directory double consent, non-deterministic flowAzure Active Directory 双重同意、非确定性流
【发布时间】:2020-02-06 12:40:38
【问题描述】:

我在 Azure 中注册了一个具有以下配置权限的应用:

在我的应用程序中,我使用以下 url 启动一个 oauth 流程(使用 XXXXXXX 编辑参数):

https://login.microsoftonline.com/common/oauth2/authorize
     ?client_id=XXXXXXX
     &grant_type=client_credentials
     &redirect_uri=XXXXXXX
     &resource=https%3A%2F%2Foutlook.office365.com
     &response_type=code&scope=openid+email+profile+full_access_as_app
     &state=XXXXXXX

我的用户两次获得相同的同意屏幕(注意不同的 URL):

然后:

然后他们被重定向到redirect_url

在回调中,大多数时候我得到:

access_denied | AADSTS650051: Claim is invalid: User.Read does not exist in client application's RequiredResourceAccess.

并且该应用程序未添加到 Azure 门户中用户的授权应用程序列表中。

但是,有时流程会起作用。

应用程序清单中的相关部分似乎是:

"oauth2Permissions": [
    {
      "adminConsentDescription": "Allow the application to access XXXXXX on behalf of the signed-in user.",
      "adminConsentDisplayName": "Access XXXXXX",
      "id": "XXXXXX",
      "isEnabled": true,
      "lang": null,
      "origin": "Application",
      "type": "User",
      "userConsentDescription": "Allow the application to access XXXXXX on your behalf.",
      "userConsentDisplayName": "Access XXXXXX",
      "value": "user_impersonation"
    }
  ],

问题:

  1. 为什么他们两次获得相同的同意对话框?我可以避免吗?
  2. 知道我的设置可能有什么问题并且流程不确定吗?

【问题讨论】:

    标签: azure azure-active-directory


    【解决方案1】:

    我昨天重现了您的问题,但今天它可以正常工作,没有任何更改。你可以再试一次。如果这个问题仍然存在,请告诉我。

    顺便说一句,auth url中不需要grant_type参数,你可以看看@junnas的回答。

    参考:

    The differences between Application permissions and Delegated permissions

    【讨论】:

      【解决方案2】:

      再次阅读您的答案,可能是您对我提到的内容没有任何问题。但我会把它留在这里,以防它对你有帮助。如果您还有其他问题,请发表评论

      您的配置和 URL 看起来很奇怪。 您想以用户还是应用程序的身份访问 API? 目前你两者都有。

      您的授权 URL 将授权类型设置为没有意义的客户端凭据(坦率地说,我希望 AAD 对此出错,但我猜响应类型的代码使其使用授权代码流)。 客户端凭据是纯后端流程,不涉及用户,因此不应在重定向中使用。

      如果您想正确使用应用程序权限,则需要简化您的方法。 以下是使用 v2 端点的客户端凭据流的文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow。 如果您的应用是多租户的,您需要像现在一样为您的应用征得同意,然后才能实际使用流程。 但是,如果它仅在您的组织中使用,您(或管理员)可以同意您在门户中的权限,然后您可以立即使用该流程。

      您通过 HTTP 调用获取令牌,包括您的应用程序的凭据 + 您想要令牌的用途。 对于 v2,此处的范围应该是 Exchange 的应用 ID/应用 ID URI + .default。 通过快速的 Google 搜索,我找不到关于 Exchange 的良好参考,但是一旦我打开我的计算机,我会尝试再次检查一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 2019-03-03
        • 1970-01-01
        相关资源
        最近更新 更多