getMemberGroups调用失败,权限不足

时间:2017-11-10 07:36:08

标签: azure-active-directory microsoft-graph

我正在尝试获取用户的组成员身份(传递)并使用Microsoft Graph。我以前在令牌中使用组声明,但在切换到AD v2.0端点(用于动态同意支持等)之后,令牌不包含那些因此需要从AD单独检索它们。

user/getMemberGroups操作正是如此,但我很难让它在不授予 Directory.Read.All权限的情况下工作。文档说任何这些都应该有效:

  • User.ReadGroup.Read.All
  • User.ReadBasic.AllGroup.Read.All
  • Directory.Read.All
  • Directory.ReadWrite.All
  • Directory.AccessAsUser.All

然而,如果用户使用Microsoft Graph代表访问令牌,则请求始终会失败,并显示响应403 Forbidden和错误代码Authorization_RequestDenied

Http请求

POST /v1.0/me/getMemberGroups HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer <removed>
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: dbb2ead3-9863-57ef-af09-d45c3ab88e69

{
  "securityEnabledOnly": false
}

我实际上是使用.NET SDK来执行操作,但可以使用纯HTTP请求重新编写它,这更清楚。

查看访问令牌,这包含Group.Read.AllUser.Read.All,这应该是一个充分的组合。

{
  "aud": "https://graph.microsoft.com",  
  [....]
  "scp": "Group.Read.All User.Read User.Read.All"
}

当前用户是AD租户的全局管理员,所以我认为这不应该是他对AD项目拥有较少权限的问题。我已经使用v2.0端点完成了此应用程序的管理员同意(不是在使用此管理员用户,AFAIK时应该重要)

1 个答案:

答案 0 :(得分:3)

getMemberGroups功能应该只需要Group.Read.All和您的情况(../me/getMemberGroupsUser.Read。但是,由于授权检查中存在错误,目前需要Directory.Read.All(这是您已经观察到的)。我担心我没有为此修复程序提供ETA,但是当我听到更多信息时会报告回来。

希望这有帮助,