Azure:服务主体获取服务主体列表的权限
Azure : Permission for Service Principal to get list of Service Principals
我正在使用适用于 .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 -> Permissions 部分看到了这个权限)
但仍然会抛出以下错误:
Microsoft.Azure.Management.Graph.RBAC.Fluent.Models.GraphErrorException: 操作 return 一个无效的状态码 'Forbidden'
但是,获取 ADGroup 和订阅列表的标注有效
var subs = authenticatedContext.Subscriptions.ListAsync().GetAwaiter().GetResults();
var sgs = authenticatedContext.Subscriptions.ActiveDirectoryGroups().GetByIdAsync(someId).GetAwaiter().GetResults();
我不知道缺少什么权限。
我这边测试代码,用fiddler抓请求。似乎 sdk 请求 Azure AD graph api 而不是 Microsoft graph api 来列出服务主体。所以你需要添加权限 Directory.Read.All
AAD graph 而不是 Microsoft graph。请参考以下步骤:
添加权限后,不要忘记授予管理员同意。然后你可以运行你的代码成功获取服务主体。
顺便说一下,AAD 权限有一个错误 Directory.Read.All
。如果我们在注册的应用中添加AAD权限Directory.Read.All
,那么即使我们从页面中删除它也无法删除该权限。因此,即使您从页面上的“API 权限”选项卡中删除 Directory.Read.All
,您仍然可以 运行 代码成功。
我正在使用适用于 .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 -> Permissions 部分看到了这个权限)
但仍然会抛出以下错误: Microsoft.Azure.Management.Graph.RBAC.Fluent.Models.GraphErrorException: 操作 return 一个无效的状态码 'Forbidden'
但是,获取 ADGroup 和订阅列表的标注有效
var subs = authenticatedContext.Subscriptions.ListAsync().GetAwaiter().GetResults();
var sgs = authenticatedContext.Subscriptions.ActiveDirectoryGroups().GetByIdAsync(someId).GetAwaiter().GetResults();
我不知道缺少什么权限。
我这边测试代码,用fiddler抓请求。似乎 sdk 请求 Azure AD graph api 而不是 Microsoft graph api 来列出服务主体。所以你需要添加权限 Directory.Read.All
AAD graph 而不是 Microsoft graph。请参考以下步骤:
添加权限后,不要忘记授予管理员同意。然后你可以运行你的代码成功获取服务主体。
顺便说一下,AAD 权限有一个错误 Directory.Read.All
。如果我们在注册的应用中添加AAD权限Directory.Read.All
,那么即使我们从页面中删除它也无法删除该权限。因此,即使您从页面上的“API 权限”选项卡中删除 Directory.Read.All
,您仍然可以 运行 代码成功。