【问题标题】:C# ActiveDirectory LDAP Group QueryingC# ActiveDirectory LDAP 组查询
【发布时间】:2009-08-24 14:38:01
【问题描述】:

基本上我想要做的是,我有一个 ASP.Net Web 应用程序,它使用表单身份验证和一些自定义代码将其链接到 ActiveDirectory(非常类似于 this 的工作方式)。

但是,每当我在域控制器中查询用户组时,它只返回他们明确所在的组,而不是子组(id est,有一个用户所属的特定安全组,比如组 A,即我想要的组的成员,比如组 B,用户显式在组 A 中,但仅隐式在组 B 中,因为组 A 是组 B 的成员。

我已阅读 tokenGroups 查询可以帮助我,但目前我没有办法解析该数据。

但是,如果我可以通过 LDAP 查询传递某些组,并且如果该用户是否在该组中,域控制器只给我一个布尔值(真/假),那么最可取的是。

有什么建议吗?

【问题讨论】:

    标签: c# active-directory ldap


    【解决方案1】:

    是的,“普通”user.Properties["memberOf"] 仅返回直接成员资格。

    如果您使用的是 .NET 3.5,则可以使用更现代的“基于主体”的方法:

    using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
    {
        using(Principal p = Principal.FindByIdentity(ctx, "yourUserName"))
        {
            var groups = p.GetGroups();
    
            using (groups)
            {
                foreach (Principal group in groups)
                {
                    Console.WriteLine(group.SamAccountName + "-" + group.DisplayName);
                }
            }
        }
    }
    

    此方法(向您的项目添加对“System.DirectoryServices.AccountManagement”程序集的引用)应该可以工作并提供用户的主要组及其嵌套组成员身份。

    如果您使用的是 .NET 2.0/3.0 并且无法升级,则通过阅读“tokenGroups”属性来使用该方法是最好的方法 - 请参阅 Ryan Dunn 的优秀博客中有关如何执行所有这些操作的详细信息帖子,Enumerating Token Groups (tokenGroups) in .NET

    马克

    【讨论】:

    • tokenGroups 方法完美运行。不幸的是,我们不在 3.5 上,所以我无法尝试新方法,但您为 tokenGroups 设置提供的链接效果很好。谢谢。
    猜你喜欢
    • 2017-05-07
    • 2015-12-07
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多