如何在C#中获取Azure安全组内的用户列表?
获取Azure安全组用户列表的C#实现方案
最简便且推荐的方式是使用Microsoft Graph SDK,它是Azure AD相关操作的官方标准库,比旧的Azure AD Graph API更稳定且功能全面。
前置准备
- 在Azure AD中注册一个应用程序,获取以下信息:
- 租户ID(Tenant ID)
- 客户端ID(Client ID)
- 客户端密钥(Client Secret)
- 给该应用添加应用权限:
GroupMember.Read.All,并完成管理员同意(后台服务场景需应用权限而非委派权限) - 安装必要的NuGet包:
Install-Package Microsoft.Graph Install-Package Azure.Identity
示例代码
以下是后台服务场景下的完整实现,包含组查询、成员获取及分页处理:
using Microsoft.Graph; using Azure.Identity; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 替换为你的Azure AD配置信息 string tenantId = "your-tenant-id"; string clientId = "your-client-id"; string clientSecret = "your-client-secret"; string targetGroupName = "你的安全组名称"; // 初始化Graph客户端 var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential); // 1. 根据组名定位目标安全组(若已知组ID可直接跳过此步骤) var groups = await graphClient.Groups .Request() .Filter($"displayName eq '{targetGroupName}'") .Select("id, displayName") .GetAsync(); var targetGroup = groups.FirstOrDefault(); if (targetGroup == null) { System.Console.WriteLine("未找到指定的安全组"); return; } // 2. 获取安全组的所有成员(自动处理分页) var allMembers = new List<DirectoryObject>(); var pageIterator = PageIterator<DirectoryObject, DirectoryObjectCollectionResponse> .CreatePageIterator( graphClient, await graphClient.Groups[targetGroup.Id].Members.Request().GetAsync(), member => { allMembers.Add(member); return true; }); await pageIterator.IterateAsync(); // 3. 筛选并输出用户成员(组内可能包含其他组、设备等非用户对象) foreach (var user in allMembers.OfType<User>()) { System.Console.WriteLine($"用户姓名: {user.DisplayName}, 邮箱: {user.Mail}, 用户ID: {user.Id}"); } } }
关键注意点
- 分页处理:Microsoft Graph API默认返回最多100条数据,使用
PageIterator可以自动遍历所有分页结果,避免遗漏成员。 - 成员类型过滤:安全组中可能包含用户、其他组、设备等目录对象,使用
OfType<User>可以精准筛选出用户成员。 - 权限验证:确保应用的
GroupMember.Read.All权限已获得管理员同意,否则会出现权限不足的错误。
内容的提问来源于stack exchange,提问作者user19329953
相关产品推荐
相关产品推荐

