C#Active Directory LDAP组查询

时间:2009-08-24 14:38:02

标签: c# active-directory ldap

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

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

我读过tokenGroups查询可以帮助我,但目前我没有办法解析这些数据。

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

有什么建议吗?

1 个答案:

答案 0 :(得分: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

马克