有没有办法找到每个role
存在对tenant
和number of users
使用role
或GraphServiceClient
类分配给每个GraphConnection
?我正在使用C#。
目录角色 - 查找租户的所有目录角色和成员数
我已经为Microsoft Graph API(https://graph.microsoft.com)以及Azure AD Graph API(https://graph.windows.net)提供了示例代码,但强烈建议使用较新的Microsoft Graph API,除非您无法获得某些特定的内容。它然后才看看Azure AD Graph API。
在这里查看更详细的比较Microsoft Graph or Azure AD Graph
以下是nuget包和类详细信息,正如您在评论中提到的那样:
Microsoft.Graph
nuget包 - 与Microsoft Graph API
合作并使用GraphServiceClient
类。Microsoft.Azure.ActiveDirectory.GraphClient
nuget包 - 使用Azure AD Graph API并使用ActiveDirectoryClient
类。Microsoft Graph API
API的 - List directoryRoles和List members
var roles = await graphServiceClient.DirectoryRoles.Request().GetAsync();
var members = graphServiceClient.DirectoryRoles[role.Id].Members.Request().GetAsync();
Azure AD Graph API
API的 - Get Directory Roles和Get a directory role's members
var directoryRoles = activeDirectoryClient.DirectoryRoles.ExecuteAsync();
var members = await activeDirectoryClient.DirectoryRoles[role.ObjectId].Members.ExecuteAsync();
注意:在测试代码时,我也注意到2 API的行为略有不同。当您要求目录角色的成员时,Microsoft Graph仅返回用户。另一方面,Azure AD Graph返回了用户和服务主体。有关Azure AD Graph的特殊检查,请参阅我的代码。
另请注意,您获得的许多结果将是分页集合,因此您可能需要在多页结果的情况下处理分页。
应用程序角色 - 查找应用程序的所有应用程序角色,然后通过应用程序角色分配查找用户数。
Application Roles特定于Azure AD中注册的应用程序。可以通过遍历租户中该应用程序的服务主体来读取该应用程序的角色分配集合。
Azure AD Graph API
App角色
var app = activeDirectoryClient.Applications["<applicationObjectId>"].ExecuteAsync().Result;
var appRoles = app.AppRoles;
应用角色分配
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(new Uri("https://graph.windows.net/<tenantGuid>"),
async () => await GetTokenForApplication());
var servicePrincipal = activeDirectoryClient.ServicePrincipals.Where(x => x.AppId == "<applicationId>").ExecuteAsync().Result.CurrentPage[0];
var appRoleAssignments = activeDirectoryClient.ServicePrincipals[servicePrincipal.ObjectId].AppRoleAssignedTo.ExecuteAsync().Result;
int userCountForApp = 0;
foreach(var appRoleAssignment in appRoleAssignments.CurrentPage)
{
if (appRoleAssignment.PrincipalType == "User")
{
userCountForApp++;
Console.WriteLine("Role Id = {0} and User Name = {1}", appRoleAssignment.Id, appRoleAssignment.PrincipalDisplayName);
}
}
Microsoft Graph API
读取分配给用户的所有应用程序特定角色(即AppRoleAssignments)的功能仅作为Microsoft Graph API beta端点的一部分提供。因此,它不够稳定,无法在生产代码中使用,也无法找到C#的Client SDK支持。阅读this SO Post by Marc LaFleur中的更多具体要点
以下是相关的API: