【问题标题】:Authorization_RequestDenied when trying to get groups from Azure Active Directory using Graph API尝试使用 Graph API 从 Azure Active Directory 获取组时出现 Authorization_RequestDenied
【发布时间】: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


【解决方案1】:

问题在于,尽管在 Azure 门户中向我的 ASP.NET 应用程序授予了适当的委派权限,但用户从未有机会同意它们。

我通过在 Azure 中为我的 ASP.NET 应用程序创建一个全新的应用程序注册重新开始,这就是我的发现:当用户第一次登录时,系统会要求他们同意所需的任何委派权限。但是,如果我在他们第一次登录后更改需要哪些委派权限,则用户下次登录时不会被要求同意(对于新需要的权限)。

这绝对不是我所期望的,所以我将就此提出一个新问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2018-06-26
    • 2020-04-27
    • 2022-01-09
    相关资源
    最近更新 更多