Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对租户使用Graph Api的角色计数_C#_Azure_Azure Active Directory_Microsoft Graph Api_Azure Ad Graph Api - Fatal编程技术网

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属性。另外,当我尝试使用图形资源管理器调用时,我收到的请求不适用于目标租户。@FIrePanda
Microsoft.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);
    }
}