gpt4 book ai didi

azure - 尝试使用 Graph API 从 Azure Active Directory 获取组时出现 Authorization_RequestDenied

转载 作者:行者123 更新时间:2023-12-05 04:12:17 37 4
gpt4 key购买 nike

我尝试使用 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 帐户登录 Azure 门户(例如 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8eebf6efe3fee2ebcee6e1fae3efe7e2a0ede1e3" rel="noreferrer noopener nofollow">[email protected]</a> )
  • 设置 Azure Active Directory 实例以进行测试。实例的域类似于 examplehotmail247.onmicrosoft.com
  • 已创建用户 ( <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5d09382e291038303f382f1d38253c302d3138353229303c34316f696a73323330343e2f322e323b29733e3230" rel="noreferrer noopener nofollow">[email protected]</a> )
  • 创建了一些群组,并使用户成为这些群组的一部分
  • 创建了一个 ASP.NET 应用程序,配置为使用 OpenID Connect 向 AAD 进行身份验证。
  • 在 AAD 中注册应用程序、创建客户端 key 、回复 URL 等。
  • 修改了 AAD 中应用的 list ,以便返回群组成员身份声明。

身份验证部分工作正常。用户登录后,我可以看到我期望的所有信息(名称、ID 等),以及包含该用户所属的所有组的 ID 的声明。

到目前为止,一切顺利。

现在,我想将这些组 ID 转换为人类可读的组名称。为此,我使用 Microsoft.Azure.ActiveDirectory.GraphClient NuGet 包,提供 GetObjectsByObjectIdsAsync方法。此方法似乎是 getObjectsByObjectIds 的包装器REST 方法。

为了尝试使其正常工作,我做了以下操作:

  • 在 Azure 门户中,我已向我的应用程序授予“登录并读取用户配置文件”和“读取目录数据”权限。
  • 使用我的 Microsoft 帐户至少登录过一次 ASP.NET 应用程序

我看到的情况:当我使用 Microsoft 帐户登录 ASP.NET 应用程序时,一切正常。但是,当我使用我创建的 AAD 帐户 ( <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ffab9a8c8bb29a929d9a8dbf9a879e928f939a97908b929e9693cdcbc8d1909192969c8d908c90998bd19c9092" rel="noreferrer noopener nofollow">[email protected]</a> ) 登录时,它失败并出现以下错误:

[DataServiceClientException: {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"1234e0bb-3144-4494-a5fb-12a937147bcf","date":"2016-12-06T18:39:13"}}] System.Data.Services.Client.BaseAsyncResult.EndExecute(Object source, String method, 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:我什至制作了 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="43172630370e262e21263103263b222e332f262b2c372e222a2f7177746d2c2d2e2a20312c302c25376d202c2e" rel="noreferrer noopener nofollow">[email protected]</a> AAD 实例的全局管理员,但仍然没有帮助。

更新 #3: 好的,首先进行一些澄清。用户登录后,我的 ASP.NET 应用程序从 OpenID Connect 流获取授权代码。获得代码后,我将使用 AcquireTokenByAuthorizationCodeAsync 将其交换为访问 token 。访问 token 与用户绑定(bind),因此我想依赖委托(delegate)权限,而不是应用程序权限。

最佳答案

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

我首先在 azure 中为我的 ASP.NET 应用程序创建一个全新的应用程序注册,我发现以下内容:当用户首次登录时,系统会要求他们同意所需的任何委派权限。但是,如果我在首次登录后更改了所需的委派权限,则用户下次登录时不会请求其同意(对于新需要的权限)。

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

关于azure - 尝试使用 Graph API 从 Azure Active Directory 获取组时出现 Authorization_RequestDenied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41002684/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com