我正在尝试获取用户的组成员身份(传递)并使用Microsoft Graph。我以前在令牌中使用组声明,但在切换到AD v2.0端点(用于动态同意支持等)之后,令牌不包含那些因此需要从AD单独检索它们。
user/getMemberGroups
操作正是如此,但我很难让它在不授予 Directory.Read.All
权限的情况下工作。文档说任何这些都应该有效:
User.Read
和Group.Read.All
User.ReadBasic.All
和Group.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.All
和User.Read.All
,这应该是一个充分的组合。
{
"aud": "https://graph.microsoft.com",
[....]
"scp": "Group.Read.All User.Read User.Read.All"
}
当前用户是AD租户的全局管理员,所以我认为这不应该是他对AD项目拥有较少权限的问题。我已经使用v2.0端点完成了此应用程序的管理员同意(不是在使用此管理员用户,AFAIK时应该重要)
答案 0 :(得分:3)
getMemberGroups功能应该只需要Group.Read.All
和您的情况(../me/getMemberGroups
)User.Read
。但是,由于授权检查中存在错误,目前需要Directory.Read.All
(这是您已经观察到的)。我担心我没有为此修复程序提供ETA,但是当我听到更多信息时会报告回来。
希望这有帮助,