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

如何获取Active Directory中指定用户的直接所属组(非嵌套组)

仅获取Active Directory用户直接所属组的解决方案

我太懂你这个痛点了——你用的UserPrincipal.GetAuthorizationGroups()方法确实会递归返回所有嵌套组,包括用户间接通过子组继承的权限组,这完全不是AD里用户“隶属于”列表显示的直接所属组。

要解决这个问题其实很简单:把GetAuthorizationGroups()换成UserPrincipal.GetGroups()方法就可以了!这个方法专门用来获取用户直接所属的组,和你在AD用户属性里看到的“隶属于”列表完全一致。

修改后的代码如下:

public List<GroupPrincipal> GetDirectGroups(string userName) 
{ 
    List<GroupPrincipal> result = new List<GroupPrincipal>(); 

    // 建立域上下文
    PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain); 

    // 查找目标用户
    UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName); 

    if(user != null) 
    {
        // 仅获取直接所属的组,而非嵌套递归的授权组
        PrincipalSearchResult<Principal> directGroups = user.GetGroups(); 

        foreach(Principal p in directGroups) 
        {
            if(p is GroupPrincipal) 
            {
                result.Add((GroupPrincipal)p); 
            }
        } 
    } 

    return result; 
}

关键区别说明:

  • GetAuthorizationGroups():返回用户所有有效授权组,包括嵌套组、跨域组,甚至系统自动生成的组(比如Authenticated Users),是为权限验证场景设计的。
  • GetGroups():只返回用户直接添加到的组,完全对应AD用户属性中“隶属于”标签页的内容,没有递归。

如果需要额外过滤掉系统内置组(比如Domain Users这类默认组),可以在遍历的时候加个判断,比如检查组的IsSecurityGroup属性或者名称前缀。

内容的提问来源于stack exchange,提问作者danivegas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:17:50