目录角色- 查找租户的所有目录角色及其成员数量
我已经给出了 Microsoft Graph API 的示例代码(https://graph.microsoft.com https://graph.microsoft.com)以及 Azure AD Graph API(https://graph.windows.net https://graph.windows.net),但强烈建议使用较新的 Microsoft Graph API,除非您无法从中获取某些特定内容,然后再查看 Azure AD Graph API。
在这里查看更详细的比较Microsoft Graph 或 Azure AD Graph https://blogs.msdn.microsoft.com/aadgraphteam/2016/07/08/microsoft-graph-or-azure-ad-graph/
正如您在评论中所询问的,以下是 nuget 包和类的详细信息:
微软图形API
API's - 列出目录角色 https://learn.microsoft.com/en-us/graph/api/directoryrole-list?view=graph-rest-1.0 and 列出成员 https://learn.microsoft.com/en-us/graph/api/directoryrole-list-members?view=graph-rest-1.0
var roles = await graphServiceClient.DirectoryRoles.Request().GetAsync();
var members = graphServiceClient.DirectoryRoles[role.Id].Members.Request().GetAsync();
Azure AD 图形 API
API's - 获取目录角色 https://learn.microsoft.com/en-us/previous-versions/azure/ad/graph/api/directoryroles-operations#get-directory-roles-- and 获取目录角色的成员 https://learn.microsoft.com/en-us/previous-versions/azure/ad/graph/api/directoryroles-operations#get-a-directory-roles-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 的特殊检查。
另请注意,您获得的许多结果将是分页集合,因此您可能需要在多页结果的情况下处理分页。
应用程序角色- 查找应用程序的所有应用程序角色,然后通过应用程序角色分配查找用户数。
应用程序角色 https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/app-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);
}
}
微软图形API
读取分配给用户的所有应用程序特定角色(即 AppRoleAssignments)的功能仅作为 Microsoft Graph API beta 端点的一部分提供。因此它不够稳定,无法在生产代码中使用,并且您找不到对 C# 的 Client SDK 支持。阅读更多具体要点Marc LaFleur 的这篇 SO 帖子 https://stackoverflow.com/questions/47161815/how-to-call-microsoft-graph-beta-api-from-c-sharp/47167606#47167606
以下是相关的 API:
- 应用程序角色分配 https://learn.microsoft.com/en-us/graph/api/approleassignment-get?view=graph-rest-beta
- AppRoles https://learn.microsoft.com/en-us/graph/api/resources/approle?view=graph-rest-beta