我正在使用服务应用查询 Microsoft Graph,如本文所述:http://graph.microsoft.io/en-us/docs/authorization/app_only
我成功地向特定于租户的 URL 发出 POST 请求并获取指定的 JSON 响应:
{
"token_type": "Bearer",
"expires_in": "3599",
"scope": "User.Read",
"expires_on": "1449685363",
"not_before": "1449681463",
"resource": "https://graph.microsoft.com",
"access_token": "<token>"
}
除了缺少“范围”参数之外。我在 AD 配置面板中检查了所有“Office 365 Exchange Online”“应用程序权限”。当针对 Graph API 使用返回的 token 时,我能够成功调用 https://graph.microsoft.com/v1.0/users/
,但无法调用其他端点。
最佳答案
我刚刚遇到这个问题,想详细说明标记为正确的答案,因为它是正确的答案,但不是完整的解决方案。如果没有范围参数,则意味着您的应用程序已注册,但管理员尚未同意该应用程序访问您的 AD 实例。注册应用程序后,您必须构建并访问以下 URL 来授权应用程序(当然需要使用管理员帐户):
GET https://login.microsoftonline.com/{TenantID}/adminconsent?
client_id=<APP ID>
&state=<This is optional for your app to use>
&redirect_uri=<ReturnURL>
TenantID:来自 Azure 门户 - 如果单击右上角的“帮助”图标,然后选择“显示诊断”,您可以在诊断 JSON 中找到租户 ID。
AppID:来自 Azure 门户 - 当您注册应用程序时,您可以转到管理控制台并剪切/粘贴
This article对于尝试进行图形集成的人来说,有大量有用的信息。
关于Azure AD token 颁发端点不返回 "scope"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028932/