【问题标题】:Azure : Permission for Service Principal to get list of Service PrincipalsAzure:服务主体获取服务主体列表的权限
【发布时间】:2020-12-27 03:31:34
【问题描述】:

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

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 -> Permissions 部分看到了这个权限)

但是,仍然会引发以下错误: 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();

我不知道缺少什么权限。

【问题讨论】:

    标签: azure azure-ad-graph-api azure-sdk-.net azure-sdk


    【解决方案1】:

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

    添加权限后,不要忘记授予管理员同意。然后你就可以运行你的代码成功获取服务主体了。

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

    【讨论】:

      猜你喜欢
      • 2020-05-28
      • 2019-02-16
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      相关资源
      最近更新 更多