C#活动目录LDAP组查询

4

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

然而,每当我查询用户组的域控制器时,它只返回他们明确所在的组而不是子组(也就是说,有一个特定的安全组,用户属于该组A,该组A是我想要的组B的成员,用户显式地属于组A,但由于组A是组B的成员,用户仅隐含地属于组B)。

我已经阅读了tokenGroups查询可以帮助我解决这个问题,但目前我没有解析该数据的方法。

然而,最可取的是,如果我可以通过LDAP查询传递某些组,并且让域控制器给我一个布尔值(true/false),表示该用户是否在该组内。

有什么建议吗?

1个回答

4

是的,“通常”的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中有关如何执行所有这些操作的详细信息。
Marc

tokenGroups方法运行得非常完美。不幸的是,我们没有升级到3.5版本,所以我无法尝试新的方法,但是你提供的关于tokenGroups设置的链接非常好用。谢谢。 - Tyler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接