检查字符串是否为有效的AD组

时间:2013-01-29 19:32:29

标签: c# active-directory

使用以下代码,我可以轻松查看提供的用户是否存在于提供的组中。

public static bool IsInGroup(string user, string group)
{
    using (var identity = new WindowsIdentity(user))
    {
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
}

但是,给出如下字符串列表: -

User1
User2
User3
Group1
Group2
Group3

通过循环这个字符串列表在c#中是否有任何方法,以检查每个条目是否是AD组?

例如,User3实际上是一个组名,但是通过查看列表,您会认为它是普通的AD用户。

是否有任何解析名称的方法,以查看它是否作为我的AD域中的组存在。

我基本上希望能够运行一个名称和组列表,并查看给定的用户名(例如“Bob”)是否在列表中,或者是否存在于此列表中的一个组中,因此如果上面列表中的条目是AD组,我想运行类似于上面的函数,以查看用户是否存在于组内。

2 个答案:

答案 0 :(得分:11)

这不是太糟糕。您需要参考以下程序集:

System.DirectoryServices
System.DirectoryServices.Protocols
System.DirectoryServices.AccountManagement

然后你可以使用这样的东西:

var groupName = "developers";

using (var context = new PrincipalContext(ContextType.Domain))
{
    var groupPrincipal = GroupPrincipal.FindByIdentity(context, groupName);
}

您可以更改PrincipalContext构造函数以将ContextType.Machine用于本地计算机,如果需要,您可以将域名添加为第二个参数,但对于本地域,它应该将其选中。

[edit]此外,如果FindByIdentity方法不匹配,它将返回null。此外,您还可以从目录服务中获取成员用户和其他有用信息。

答案 1 :(得分:1)

检查此链接。基本上将组转换为角色,然后您可以使用标准成员资格提供程序功能来使用它。

http://slalomdev.blogspot.com/2008/08/active-directory-role-provider.html