微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure:服务主体的权限以获取服务主体列表

如何解决Azure:服务主体的权限以获取服务主体列表

我正在使用.NET的Fluent Azure SDK尝试获取租户中所有服务主体的列表。

var authenticatedContext = Azure.Authenticate(
     await SdkContext.AzureCredentialsFactory.FromServicePrincipal(aadClientId,aadClientSecret,tenantId,"AzureGlobalCloud")
);

var sps = authenticatedContext.ServicePrincipals.ListAsync().GetAwaiter().GetResults();

具有AAD客户端ID的服务主体具有Directory.Read.All API权限。 (请确保我没有丢失任何东西:我在Azure门户的ServicePrincipal->权限部分中看到了此权限)

但仍然会引发以下错误: Microsoft.Azure.Management.Graph.RBAC.Fluent.Models.GraphErrorException:操作返回无效的状态码“禁止

但是,获取ADGroup的标注和订阅列表有效

var subs = authenticatedContext.Subscriptions.ListAsync().GetAwaiter().GetResults();

var sgs = authenticatedContext.Subscriptions.ActiveDirectoryGroups().GetByIdAsync(someId).GetAwaiter().GetResults();

我不知道缺少什么权限。

解决方法

我在一边测试代码,然后使用提琴手捕获请求。似乎sdk请求 Azure AD图形api ,而不是 Microsoft图形api 列出服务主体。因此,您需要添加AAD图的权限Directory.Read.All,而不是Microsoft图的权限。请参考以下步骤:

enter image description here

enter image description here

添加许可后,请不要忘记授予管理员许可。然后,您可以成功运行代码以获取服务主体。

顺便说一句,有一个具有AAD权限Directory.Read.All的错误。如果我们将AAD权限Directory.Read.All添加到已注册的应用中,则即使我们从页面中将其删除,也无法删除该权限。因此,即使您从页面的“ API权限”标签中删除了Directory.Read.All,您仍然可以成功运行代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。