Mirosoft Graph API提供不受支持的权限错误

时间:2017-02-23 16:37:25

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

我已在apps.dev.microsoft.com中创建了该应用。我使用https://login.microsoftonline.com/common/oauth2/v2.0/authorize获取授权代码,使用https://login.microsoftonline.com/common/oauth2/v2.0/token访问和刷新令牌。我成功获取了访问令牌,但当我尝试读取已登录用户的配置文件数据时,它给出了错误:

Array (
    [error] => Array
        (
            [code] => Authorization_RequestDenied
            [message] => Insufficient privileges to complete the operation.
            [innerError] => Array
                (
                    [request-id] => 02269b14-2cf9-458e-b9d6-2aec1a23cee3
                    [date] => 2017-02-23T16:30:44
                )

        )

)

当我使用创建应用程序的原始ID时,此错误不会显示。但是,当我在租赁之外使用任何其他ID时,会出现此错误。任何人都可以为此建议任何解决方法吗?

1 个答案:

答案 0 :(得分:1)

根据preview post,您使用下面的请求获取令牌:

GET:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id={clientId}&scope=openid%20profile&redirect_uri={redirectURL}

在此请求中,您使用的是范围openid,profile),它不会返回access_token以使用 Microsoft Graph REST 个人资料范围仅返回 id_token 中的用户信息,而不是授予您通过Microsoft Graph REST访问用户信息的权限。

如果您想使用Microsoft Graph REST,我们需要添加https://graph.microsoft.com/user.Read这样的范围(有关读取用户信息的更多范围,请参阅here)。以下是一个示例请求供您参考,以便通过https://graph.microsoft.com/v1.0/me访问用户的个人资料:

GET:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id={clientId}&scope=https://graph.microsoft.com/user.Read%20openid%20profile&redirect_uri={redirectURL}

请注意,access_token与id_token不同。我们应该使用 access_token 执行资源请求(Microsoft Graph)。 id_token 仅用于验证客户端的用户身份。有关客户端和资源概念的更多信息,请参阅here

如果有帮助,请告诉我。