【问题标题】:check if string is a valid AD group检查字符串是否是有效的 AD 组
【发布时间】:2013-01-29 19:32:29
【问题描述】:

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

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

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    还不错。您将需要引用以下程序集:

    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。此外,您还可以从目录服务中获取成员用户和其他有用信息。

    【讨论】:

    • 这看起来不错。明天会检查它。谢谢。赞成。
    【解决方案2】:

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

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

    【讨论】:

    • 这里可能是一些有用的信息。谢谢。不过,杜安上面的回答似乎更合乎逻辑。塔。
    • Duane 的回答将解决您在代码中遇到的具体问题。这个答案将解决您的整个用例。 6个一个,半打另一个。祝你好运!
    • 您能否详细说明您的答案?我只想检查给定的字符串是否作为我的域中的广告组存在,我看不出 ASP.NET 的角色提供程序将如何提供帮助?
    • 根据您提供的代码 sn-p,您似乎正在尝试在检查用户是否在组中之前验证它是一个组。角色提供者会将组公开为角色。从那里您可以使用角色提供程序来验证字符串是否是角色以及用户是否在角色中(基于上述代码 sn-p 的隐含要求)。
    • 是的,没错。我现在明白你在说什么了。我可能会从 Duanes 的答案开始,因为您的答案有点复杂,并且由于它被添加到自定义 SSRS 程序集中,因此开始变得更简单。谢谢。
    猜你喜欢
    • 2013-02-13
    • 2019-05-05
    • 2019-10-04
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多