我已在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时,会出现此错误。任何人都可以为此建议任何解决方法吗?
答案 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。
如果有帮助,请告诉我。