OAuth2流,用于获取用于Microsoft图形访问的令牌

时间:2019-08-23 18:22:09

标签: azure-active-directory microsoft-graph

我正在尝试使用JWT承载令牌调用Microsoft Graph来调用https://graph.microsoft.com/v1.0/me

起初,我使用的是Azure OAuth v1终结点,但返回的JWT没有正确的受众群体,因此不允许我将其称为Microsoft Graph。现在,使用v2端点,但出现错误:

"error_description": "AADSTS65001: The user or administrator has not consented to use the application with ID 'xxxxx' named 'MyAppName'. 
Send an interactive authorization request for this user and resource.
Trace ID: xxxxx-xxxxx-xxxxxxx-xxxxxxxx
Correlation ID: xxxxx-xxxxx-xxxxxxx-xxxxxxxx
Timestamp: 2019-08-23 18:06:39Z"

据我所知,我已经为我在AAD中注册的应用程序设置了正确的API权限。 enter image description here

我被困在这里,甚至无法尝试使用从v2返回的JWT进行测试。

这里有什么想法吗?所有的Google命中记录都告诉我,我需要设置我的API权限,您已经在屏幕快照中看到了。

这是我首先要获取我的code的URL:

https://login.microsoftonline.com/xxxx-tentantidxxxx/oauth2/v2.0/authorize?client_id=xxxx-clientid-xxx&response_type=code&scope=https://graph.windows.net/directory.read.all%20https://graph.windows.net/user.read&redirect_uri=https://MyCoolsite.neat.com

2 个答案:

答案 0 :(得分:2)

您不会将旧版Azure AD Graph API(graph.windows.net)与Microsoft Graph(graph.microsoft.com)混淆。这是两个不同的API,具有各自的端点和权限范围。

您将为此使用Microsoft Graph,这意味着您需要请求Microsoft Graph Scope。在这种情况下,您唯一需要的范围User.Read使用Directory.Read.All将需要“管理员同意”,这会增加一些您此时不需要的不必要的复杂性。

您使用的URL也可以简化(不需要指定租户):

https://login.microsoftonline.com/common/oauth2/v2.0/authorize

对于查询参数,您需要

?client_id={clientId}&response_type=code&scope=User.Read&redirect_uri=https://redirect.url

如果要使用注册中指定的范围而不是动态请求它们,则可以删除User.Read并使用https://graph.microsoft.com/.default

如果您想使用v1终结点,只需完全放下scope并将其替换为您要与之交谈的资源(受众)。您的情况是resource=https://graph.microsoft.com

请记住,您确实需要对传入的进行URL编码:

?client_id={clientId}&response_type=code&scope=User.Read&redirect_uri=https%3A%2F%2Fredirect.url%0A

答案 1 :(得分:0)

根据我的观察,您必须使用应用程序权限,因为当前设置需要交互式会话。这是如何设置应用程序许可的指南

https://github.com/ivfranji/GraphManagedApi/wiki/Registering-Microsoft-Graph-App