You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取Azure安全组内的用户列表?

获取Azure安全组用户列表的C#实现方案

最简便且推荐的方式是使用Microsoft Graph SDK,它是Azure AD相关操作的官方标准库,比旧的Azure AD Graph API更稳定且功能全面。

前置准备

  1. 在Azure AD中注册一个应用程序,获取以下信息:
    • 租户ID(Tenant ID)
    • 客户端ID(Client ID)
    • 客户端密钥(Client Secret)
  2. 给该应用添加应用权限:GroupMember.Read.All,并完成管理员同意(后台服务场景需应用权限而非委派权限)
  3. 安装必要的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:18:19