我正在尝试使用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权限。
我被困在这里,甚至无法尝试使用从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
答案 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