【发布时间】:2016-12-08 01:12:04
【问题描述】:
我正在尝试使用 Graph API 获取有关 Azure Active Directory 组的信息,但我不断收到“Authorization_RequestDenied”响应。
这个问题类似于Insufficient privileges error when trying to fetch signed in user's group membership using Azure AD Graph API,但那个问题的答案对我不起作用。
这是我所做的:
- 使用我的 Microsoft 帐户(例如
example@hotmail.com)登录到 Azure 门户 - 设置用于测试的 Azure Active Directory 实例。实例的域类似于
examplehotmail247.onmicrosoft.com - 创建了一个用户 (
TestMember@examplehotmail247.onmicrosoft.com) - 创建了一些组,并使用户成为这些组的一部分
- 创建了一个配置为使用 OpenID Connect 对 AAD 进行身份验证的 ASP.NET 应用程序。
- 在 AAD 中注册了应用程序,创建了客户端密码、回复 URL 等。
- 修改了 AAD 中应用程序的清单,以便返回组成员身份声明。
身份验证部分工作正常。用户登录后,我可以看到我期望的所有信息(姓名、ID 等),以及包含用户所属所有组的 ID 的声明。
到目前为止,一切都很好。
现在,我想将这些组 ID 转换为人类可读的组名。为此,我使用了Microsoft.Azure.ActiveDirectory.GraphClient NuGet 包,它提供了GetObjectsByObjectIdsAsync 方法。此方法似乎是getObjectsByObjectIds REST 方法的包装器。
为了尝试让这个工作,我做了以下事情:
- 在 Azure 门户中,我已向我的应用程序授予“登录并读取用户配置文件”和“读取目录数据”权限。
- 使用我的 Microsoft 帐户至少登录一次我的 ASP.NET 应用程序
我所看到的:当我使用我的 Microsoft 帐户登录到我的 ASP.NET 应用程序时,一切正常。但是,当我使用我创建的 AAD 帐户 (TestMember@examplehotmail247.onmicrosoft.com) 登录时,它会失败并出现以下错误:
[DataServiceClientException: {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"权限不足,无法完成操作。"}, "requestId":"1234e0bb-3144-4494-a5fb-12a937147bcf","date":"2016-12-06T18:39:13"}}] System.Data.Services.Client.BaseAsyncResult.EndExecute(对象源,字符串方法,IAsyncResult asyncResult)+919 System.Data.Services.Client.QueryResult.EndExecuteQuery(Object source, String method, IAsyncResult asyncResult) +116
直接使用 REST api 尝试等效查询(即从图片中删除 ASP.NET)会得到相同的结果。
那么我在这里错过了什么?
更新:我还授予应用程序以下委派权限(授予 Windows Azure Active Directory):登录并读取用户配置文件、读取目录数据、以登录用户身份访问目录。然而,这并没有什么不同。
更新 #2:我什至将 TestMember@examplehotmail247.onmicrosoft.com 设置为 AAD 实例的全局管理员,但它仍然没有帮助。
更新 #3: 好的,首先,澄清一下。用户登录后,我的 ASP.NET 应用程序从 OpenID Connect 流中获取授权代码。获得代码后,我将使用AcquireTokenByAuthorizationCodeAsync 将其交换为访问令牌。访问令牌与用户相关联,因此我想依赖委派权限,而不是应用程序权限。
【问题讨论】:
-
您是否尝试过授予您的应用应用级权限?虽然读取目录数据权限应该可以工作,但它是一个委托权限,还取决于登录用户的权限。如果用户不是管理员,可能会导致应用程序也无法访问数据。如果您希望应用程序无论用户如何都可以访问,则必须为其授予应用程序权限。
-
@juunas 尝试使用应用程序权限,但它没有改变任何东西 - 同样的错误
-
TestMember@examplehotmail247@onmicrosoft.com您的意思是使用退出Microsoft 帐户 添加帐户吗? -
@FeiXue-MSFT 抱歉 - 应该是
TestMember@examplehotmail247.onmicrosoft.com- 我有太多@符号。
标签: azure azure-active-directory azure-ad-graph-api