gpt4 book ai didi

c# - 使用 Graph Api 针对租户进行角色计数

转载 作者:行者123 更新时间:2023-12-02 23:44:14 25 4
gpt4 key购买 nike

有没有办法找到针对租户存在的每个角色以及针对每个分配的用户数量使用 GraphServiceClientGraphConnection 类的角色?我正在使用 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 directoryRolesList members

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

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

Azure AD 图形 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 图形 API

应用程序角色

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:

关于c# - 使用 Graph Api 针对租户进行角色计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55071897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com