【问题标题】:Azure AAD and Graph API: Insufficient privileges to complete the operationAzure AAD 和 Graph API:权限不足,无法完成操作
【发布时间】:2019-05-08 15:07:52
【问题描述】:

上下文:我有一个控制台应用程序,它想使用 Graph API 与 AAD 对话,以检查租户中是否存在特定的 userId。

我一直在遵循这里的准则:https://docs.microsoft.com/en-us/graph/auth-v2-service?view=graph-rest-1.0

我可以使用这个生成一个令牌:

https://login.microsoftonline.com/common/oauth2/v2.0/token
client_id=x
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=x
&grant_type=client_credentials

但是当我调用图形 API 时,我得到了这个错误:

https://graph.microsoft.com/v1.0/users/12345678-73a6-4952-a53a-e9916737ff7f
{
    "error": {
        "code": "Authorization_RequestDenied",
        "message": "Insufficient privileges to complete the operation.",
        "innerError": {
            "request-id": "x",
            "date": "x"
        }
    }
}

我的 AAD 应用拥有以下所有权限:

1. Microsoft Graph
2. Windows Azure Active Directory

我尝试将范围更改为

scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read

但这是我在生成令牌时遇到的错误:

The provided value for the input parameter 'scope' is not valid. The scope https://graph.microsoft.com/user.read is not valid.

我尝试了“User.Read”、“User.Basic.Read”等的组合,但没有任何效果。

【问题讨论】:

    标签: azure-active-directory azure-ad-graph-api


    【解决方案1】:

    这不起作用的最可能原因是您将应用注册配置为要求的权限实际上并未由您组织的管理员授予 .

    在您的代码中,您的应用仅作为应用进行身份验证。不涉及登录用户,它要求您的应用使用并保密用于身份验证的密钥(client_secret 参数)。

    在这种情况下,请求范围https://graph.microsoft.com/.default 是正确的方法。您对 Azure AD 说的是:“请为该应用程序已授予的所有应用程序权限提供访问令牌”。请求范围 https://graph.microsoft.com/User.Read 不是正确的方法,因为没有具有该名称的 application 权限。

    【讨论】:

      【解决方案2】:

      您创建的应用程序是否具有该范围的委派权限或应用程序权限?

      很可能是前者。委派权限不适用于客户端凭据流。

      【讨论】:

      • 这仍然是真的吗?我确实有一个应用程序已经获得了多个用户权限。其中offline_access 权限。其中 afaik 意味着应用程序可以在没有用户活动的情况下访问允许的用户资源本身。在那种情况下,我试图使用 client_id 和 client_secret 为应用程序获取 access_token。但是我遇到了错误...
      最近更新 更多