【发布时间】:2016-11-03 17:42:14
【问题描述】:
我们已迁移到我工作的新租户。因此,我们正在尝试将我们的应用程序重新添加到 Azure AD 中。我们有一个记录在案的过程,该过程过去一直有效,以便为我们的 MVC 和 WebAPI 项目添加应用程序。但是,我们在尝试查询 Graph API 时遇到了错误。在示例应用程序中,我们使用此处的代码创建了一个自定义授权属性,该属性允许我们基于组进行身份验证。调试 /Utilities/GraphHelper.cs 后,我们确定应用程序收到 403 状态错误,并显示一条消息:“权限不足,无法完成操作。”
经过一番研究,我能够在 Fiddler 中复制身份验证过程。
操作方法:POST
网址:https://login.windows.net/[tennantName]/oauth2/token?api-version=1.0
标题块:
Content-Type: application/x-www-form-urlencoded
Host: login.windows.net
Content-Length: 180
Expect: 100-continue
Connection: Keep-Alive
请求正文:
grant_type=client_credentials&resource=https%3a%2f%2fgraph.windows.net&client_id=[clientId]&client_secret=[urlencoded client secret]
我从这个请求中取回一个令牌,然后尝试使用 fiddler 再次从 graphapi 查询联合目录:
操作方法:GET
网址:https://graph.windows.net/[federateddomain]/directoryObjects/{group-guid}
标题块:
Content-Type: application/json
Host: graph.windows.net
Authorization: Bearer [token from login response]
我收到了带有正文的 403 响应:
{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."}}}
在 Azure Active Directory 中,在此应用程序的应用注册下,清单已由具有公司管理员角色的用户修改:
"groupMembershipClaims": "SecurityGroup", ...
"oauth2AllowImplicitFlow": true,
生成了一个应用程序密钥,用于获取令牌以访问图形 API。 在所需的应用程序权限下,读取目录数据和读取所有隐藏的成员资格由具有公司管理员角色的用户检查。
我没有想法,一切都应该正常工作。
【问题讨论】:
-
您是否通过解析 jwt 令牌(jwt.io)验证了权限已添加到令牌中?如果不存在,您可能必须为用户重新同意。
-
图形 api 调用发生在应用程序级别,不需要用户同意。
-
令牌中的
roles声明是什么? -
我如何找到它。我解码了令牌,但我没有在有效负载中看到角色声明。
-
您收到的访问令牌应包含已授予您的应用访问 Graph API 的权限。类似于 Directory.Read.All.
标签: azure azure-active-directory