我正在尝试使用已注册的应用程序登录,并具有以下权限: Azure门户>应用程序注册>应用程序注册(预览)>我的应用程序名称-API权限
根据this documentation,在请求令牌时,我必须在scope参数中传递我的资源标识符(APP ID URI
)。我可以肯定,这个范围参数是导致我出现问题的参数。
我尝试了示波器的不同参数。
https://graph.microsoft.com/.default
:这适用于基本功能,例如阅读日历,但我认为默认权限满足我的需求很少。既然可以,我相信我的其他参数是正确的,范围就是问题。
[APP-ID]/.default
:这给了我一个成功的响应,但是,每当我尝试发出任何请求(包括基本读取日历请求)时,我都会得到InvalidAuthenticationToken
。我可以向您保证,我将传递从令牌请求中检索到的正确令牌。
基于在线建议的多个不同的URL组合。 他们都返回
“在租户{id}中找不到资源主体{resource-url}。
我坚信问题是我没有为我的申请传递正确的APP ID URI
。谁能告诉我在哪里可以找到此资源?我在网上搜索的所有内容都有2年以上的历史了,对于新的Azure门户来说似乎并不相同。
答案 0 :(得分:1)
对于客户端凭据(即在没有用户的情况下获取令牌),您需要传递https://graph.microsoft.com/.default
作为scope
。
https://graph.microsoft.com/.default
提供的权限是您在门户网站中注册应用程序时指定的“应用程序权限”:
一旦添加了应用程序所需的所有“应用程序权限”,就需要为租户中的这些范围“授予许可”(这是“ API权限”标签底部的按钮。
一旦有了这些,就需要向POST
端点发出/token
(换行符只是为了可读性,应该是一个字符串):
POST https://login.microsoftonline.com/{{tenantDomain}}/oauth2/token
Content-Type: application/x-www-form-urlencoded
client_id={your-app-id}
&scope=https://graph.microsoft.com/.default
&client_secret={your-client-secret}
&grant_type=client_credentials
这将为您返回如下内容:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "3600",
"expires_on": "1554431330",
"not_before": "1554427430",
"resource": "00000003-0000-0000-c000-000000000000",
"access_token": "eyJ0eXAiOiJKV1QiLCJub25jZS..."
}
调用Graph时,需要将Authorization
标头设置为token_type access_token
。因此,调用/users
看起来像这样:
GET https://graph.microsoft.com/v1.0/users
Authorization:"Bearer eyJ0eXAiOiJKV1QiLCJub25jZS..."
Host:"graph.microsoft.com"
Accept:"application/json"