尝试使用图谱API

时间:2016-12-06 18:50:28

标签: azure azure-active-directory azure-ad-graph-api

我尝试使用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":{&#34 ; lang":" en"," value":"没有足够的权限来完成操作。"}," requestId": #&34; 1234e0bb-3144-4494-a5fb-12a937147bcf""日期":" 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:我甚至让TestMember@examplehotmail247.onmicrosoft.com为AAD实例的全局管理员,但它仍然没有帮助。

更新#3:好的,首先,澄清一下。用户登录后,我的ASP.NET应用程序从OpenID Connect流中获取授权代码。获得代码后,我会使用AcquireTokenByAuthorizationCodeAsync将其替换为访问令牌。访问令牌与用户绑定,因此我希望依赖委派的权限,而不是应用程序权限。

1 个答案:

答案 0 :(得分:1)

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

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

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