我尝试使用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类似,但该问题的答案对我没有用。
这就是我所做的:
example@hotmail.com
)examplehotmail247.onmicrosoft.com
TestMember@examplehotmail247.onmicrosoft.com
)验证部分工作正常。用户登录后,我可以看到我期望的所有信息(名称,ID等),以及包含用户所属的所有组的ID的声明。
到目前为止,非常好。
现在,我想将这些组ID转换为人类可读的组名。为此,我使用了Microsoft.Azure.ActiveDirectory.GraphClient
NuGet包,它提供了GetObjectsByObjectIdsAsync
方法。这个方法似乎是getObjectsByObjectIds
REST方法的包装器。
为了尝试让这项工作成功,我已经完成了以下工作:
我看到的:当我使用我的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
将其替换为访问令牌。访问令牌与用户绑定,因此我希望依赖委派的权限,而不是应用程序权限。
答案 0 :(得分:1)
问题是虽然在Azure门户中为我的ASP.NET应用程序授予了适当的委派权限,但用户从未有机会同意这些权限。
我开始为我的ASP.NET应用程序在azure中创建一个全新的应用程序注册,这是我发现的:当用户第一次登录时,他们被要求同意任何委派的权限是必需的。但是,如果我在第一次登录后更改了所需的委派权限,则下次登录时不会要求用户同意(对于新要求的权限)。
这绝对不是我的预期,所以我打算就此提出一个新问题。