C# 针对租户使用Graph Api的角色计数
是否有方法使用C# 针对租户使用Graph Api的角色计数,c#,azure,azure-active-directory,microsoft-graph-api,azure-ad-graph-api,C#,Azure,Azure Active Directory,Microsoft Graph Api,Azure Ad Graph Api,是否有方法使用GraphServiceClient或GraphConnection类查找针对租户存在的每个角色,以及针对每个角色分配的用户数?我正在使用C#。目录角色-查找租户的所有目录角色及其成员数 我已经给出了Microsoft Graph API()和Azure AD Graph API()的示例代码,但强烈建议使用较新的Microsoft Graph API,除非有您无法从中获得的特定内容,然后再查看Azure AD Graph API 在这里查看更详细的比较 以下是nuget软件包和类
GraphServiceClient
或GraphConnection
类查找针对租户存在的每个角色
,以及针对每个角色分配的用户数
?我正在使用C#。目录角色-查找租户的所有目录角色及其成员数
我已经给出了Microsoft Graph API()和Azure AD Graph API()的示例代码,但强烈建议使用较新的Microsoft Graph API,除非有您无法从中获得的特定内容,然后再查看Azure AD Graph API
在这里查看更详细的比较
以下是nuget软件包和类的详细信息,正如您在评论中所问的:
Microsoft.Graph
nuget软件包-使用Microsoft Graph API
并使用GraphServiceClient
类
Microsoft.Azure.ActiveDirectory.GraphClient
nuget软件包-使用Azure AD Graph API并使用ActiveDirectoryClient
类
微软图形API
空气污染指数-及
Azure AD图形API
空气污染指数-及
注意:在测试代码时,我还注意到2个API的行为有一点不同。Microsoft Graph仅在您请求目录角色的成员时返回用户。另一方面,Azure AD Graph同时返回用户和服务主体。查看我的代码,了解Azure广告图的特殊检查
还请注意,您得到的许多结果都是分页的集合,因此在有多页结果的情况下,您可能需要处理分页
应用程序角色-查找应用程序的所有应用程序角色,然后通过应用程序角色分配查找用户数
特定于在Azure AD中注册的应用程序。可通过租户中该应用程序的服务主体来读取该应用程序的角色分配集合
Azure AD图形API
应用程序角色
var app = activeDirectoryClient.Applications["<applicationObjectId>"].ExecuteAsync().Result;
var appRoles = app.AppRoles;
var-app=activeDirectoryClient.Applications[“
以下是相关的API:
在你的问题中,你提到了GraphServiceClient,但你最初只标记了Azure AD Graph API,而没有标记Microsoft Graph API。就像你在我的另一篇文章中的评论一样。提到Graph.windows.net,所以我不确定你要找的是哪一个,因此我两者都做了。我需要安装什么软件包才能获得ActiveDirectoryClient?clas我拥有的是GraphConnection,它似乎没有Applications属性。另外,当我尝试使用图形资源管理器调用时,我收到的请求不适用于目标租户。@FIrePandaMicrosoft.Azure.ActiveDirectory.GraphClient
nuget包,用于使用Azure AD图形API和ActiveDirectoryClient
class、 Microsoft.Graph
软件包,用于使用Microsoft Graph API
并使用GraphServiceClient
类。另外,您是否可以澄清您感兴趣的角色?分配给用户的目录角色或分配给用户的某些已注册应用程序特定角色?那么,目录角色和应用程序角色?我想我对分页的评论是针对Approvalsignments集合的,因为这是我在回答问题时首先要做的,但后来意识到您可能在寻找目录角色。请看一下我使用foreach的代码(Approvalsignments.CurrentPage中的var Approvalsignment)
Docs您用于对目录角色进行分页的链接似乎是有效的。此外,目录角色模板的数量非常少,因此没有分页是有意义的。
var directoryRoles = activeDirectoryClient.DirectoryRoles.ExecuteAsync();
var members = await activeDirectoryClient.DirectoryRoles[role.ObjectId].Members.ExecuteAsync();
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);
}
}