使用Graph Api对租户进行角色计数

问题描述 投票:1回答:1

有没有办法找到每个role存在对tenantnumber of users使用roleGraphServiceClient类分配给每个GraphConnection?我正在使用C#。

c# azure azure-active-directory microsoft-graph azure-ad-graph-api
1个回答
1
投票

目录角色 - 查找租户的所有目录角色和成员数

我已经为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 directoryRolesList members

var roles = await graphServiceClient.DirectoryRoles.Request().GetAsync();

var members = graphServiceClient.DirectoryRoles[role.Id].Members.Request().GetAsync();

Azure AD Graph API

API的 - Get Directory RolesGet 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:

© www.soinside.com 2019 - 2024. All rights reserved.