【发布时间】:2018-06-10 17:28:57
【问题描述】:
我正在尝试使用在 Azure 的 Active Directory 中创建的应用来请求 "List privilegedRoles" resource。
我已在 Graph API 应用程序中为其授予了所有应用程序权限和委托权限,但无济于事。
响应总是:
"error": {
"code": "UnknownError",
"message": "{\"message\":\"An error has occurred.\"}",
"innerError": {
"request-id": "3e1bb5cf-2d2e-402f-8648-27193b28510a",
"date": "2018-06-06T14:26:02"
}
}
任何帮助将不胜感激
更新 1:
问题的完整再现 -
- 具有委派权限“Directory.AccessAsUser.All”(无应用程序权限)的 V2 应用程序,重定向 url 为 http://localhost/myapp/permissions
第 1 步:管理员同意
并授予管理员对请求的权限的同意
看到成功重定向到:
http://localhost/myapp/permissions?admin_consent=True&tenant=MY_TENANT_ID&state=12345
第 2 步:获取令牌
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'client_id=MY_APP_ID&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=MY-APP-SECRET&grant_type=client_credentials' 'https://login.microsoftonline.com/MY_TENANT_ID/oauth2/v2.0/token'
得到如下回复:
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 0,
"access_token": "SOME-VERY-LONG-TOKEN"
}
第 3 步:尝试获取资源
curl -X GET -H "Authorization: Bearer SOME-VERY-LONG-TOKEN" 'https://graph.microsoft.com/beta/privilegedRoles'
错误:
{
"error": {
"code": "UnknownError",
"message": "{\"message\":\"An error has occurred.\"}",
"innerError": {
"request-id": "cc9c950c-369c-4fb5-8ec4-eb4048e32a5d",
"date": "2018-06-10T09:09:57"
}
}
}
【问题讨论】:
-
您能否提供一个您使用的代码示例以及您发送到 API 的不记名令牌?
-
@MarcLaFleur 它有点复杂,因为它分布在多个 java 类中。我正在使用相同的方法从图形 API 中成功获取用户和组,所以我认为问题不存在。正如我所提到的,令牌是通过服务主体/应用程序使用 (tenant id, app id, secret) 三元组创建的。
-
没有看到一些代码或令牌,这只是一个猜谜游戏。由于令牌不能同时持有 应用程序和委托,因此了解您如何获得该令牌将解释很多。查看这篇文章以获得更深入的解释:massivescale.com/application-vs-delegated-scopes
-
@MarcLaFleur 查看我的样本复制更新。仅存在委托权限。
-
看看我链接到的文章。您正在使用客户端凭据,这意味着您不使用委托权限。我链接到的文章解释了这些作用域的工作原理。