6

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

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 组,我想运行类似于上面的功能来查看用户是否存在于组中。

4

2 回答 2

12

这还不错。您将需要参考以下程序集:

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 用于本地计算机,如果需要,您可以添加域名作为第二个参数,但对于本地域,它应该选择它。

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

于 2013-01-29T19:48:55.173 回答
1

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

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

于 2013-01-29T19:46:36.933 回答