我尝试使用 Graph API 获取有关 Azure Active Directory 组的信息,但不断收到“Authorization_RequestDenied”响应。
这个问题类似于尝试使用 Azure AD Graph API 获取登录用户的组成员身份时出现权限不足错误,但这个问题的答案对我不起作用。
这是我所做的:
- 使用我的 Microsoft 帐户登录到 Azure 门户(例如
[email protected]
)
- 设置 Azure Active Directory 实例以进行测试。实例的域类似于
examplehotmail247.onmicrosoft.com
- 创建了一个用户(
[email protected]
)
- 创建一些组,并使用户成为这些组的一部分
- 创建了一个 ASP.NET 应用程序,配置为使用 OpenID Connect 对 AAD 进行身份验证。
- 在 AAD 中注册应用程序,创建客户端密钥、回复 URL 等。
- 修改了 AAD 中应用程序的清单,以便返回组成员身份声明。
身份验证部分工作正常。用户登录后,我可以看到我期望的所有信息(名称、ID 等),以及包含该用户所属的所有组的 ID 的声明。
到目前为止,一切都很好。
现在,我想将这些组 ID 转换为人类可读的组名称。为此,我正在使用Microsoft.Azure.ActiveDirectory.GraphClient
NuGet 包,它提供了GetObjectsByObjectIdsAsync
方法。这个方法似乎是一个包装getObjectsByObjectIds休息方法。
为了尝试使其正常工作,我做了以下操作:
- 在 Azure 门户中,我已向我的应用程序授予“登录并读取用户配置文件”和“读取目录数据”权限。
- 使用我的 Microsoft 帐户至少登录一次我的 ASP.NET 应用程序
我看到的情况:当我使用 Microsoft 帐户登录 ASP.NET 应用程序时,一切正常。但是,当我使用我创建的 AAD 帐户登录时([email protected]
),它失败并出现以下错误:
[DataServiceClientException: {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"权限不足,无法完成操作。"},"requestId" :"1234e0bb-3144-4494-a5fb-12a937147bcf","日期":"2016-12-06T18:39:13"}}]
System.Data.Services.Client.BaseAsyncResult.EndExecute(对象源,字符串方法,IAsyncResult asyncResult)+919
System.Data.Services.Client.QueryResult.EndExecuteQuery(对象源,字符串方法,IAsyncResult asyncResult)+116
直接使用 REST api 尝试等效查询(即排除 ASP.NET)会得到相同的结果。
那么我在这里缺少什么?
Update:我还向应用程序授予了以下委派权限(对 Windows Azure Active Directory):登录并读取用户配置文件、读取目录数据、以登录用户身份访问目录。然而,这并没有什么区别。
更新#2:我什至做了[email protected]
AAD 实例的全局管理员,但仍然没有帮助。
更新#3:好的,首先需要澄清一下。用户登录后,我的 ASP.NET 应用程序从 OpenID Connect 流获取授权代码。获得代码后,我将使用它来交换访问令牌AcquireTokenByAuthorizationCodeAsync
。访问令牌与用户绑定,因此我想依赖委托权限,而不是应用程序权限。