【问题标题】:Recursive check for user in an AD Group [duplicate]AD组中用户的递归检查[重复]
【发布时间】:2014-02-02 20:32:15
【问题描述】:

我正在尝试用 C# 编写一个 Web 服务,它接受用户名和 AD 组名称,并返回 true 或 false 作为结果。现在我正在为此做一些事情。

public static Boolean CheckGroupForUser(String username, String groupname) {

        Boolean Success = false;

        try
        {
            using (PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain))
            using (UserPrincipal user = UserPrincipal.FindByIdentity(oPrincipalContext, username))
            using (GroupPrincipal gp = GroupPrincipal.FindByIdentity(oPrincipalContext, groupname))
            {
                Success = user.IsMemberOf(gp);
            } 
        }
        catch (Exception)
        {
            Success = false;
        }
        return Success;
    }

这很好用。如果用户在组中,则返回 true,否则返回 false。问题是这样的。

假设我有一个名为 TestGroup 的 AD 组。 TestGroup 中有 1 个名为 Bob 的用户。

CheckGroupForUser("Bob","TestGroup"); //true

假设用户 Bob 也在 AD 组 OtherGroup 中。所以我把 Bob 带出 TestGroup,但将 OtherGroup 添加到 TestGroup。所以现在从技术上讲,Bob 是在 TestGroup,但不是直接的。

CheckGroupForUser("Bob","TestGroup"); //false

这是我需要帮助的地方。我需要这种情况是真实的。赶上我的漂移?有什么建议吗?

【问题讨论】:

    标签: c# .net active-directory active-directory-group


    【解决方案1】:

    如果你使用System.DirectoryServices,你可以这样做by using the rule LDAP_MATCHING_RULE_IN_CHAIN in your search

    基本上你使用如下过滤器:

    (member:1.2.840.113556.1.4.1941:=userDN)
    

    其中 userDN 是您感兴趣的用户的专有名称。

    【讨论】:

    • 请原谅我的无知,但在这种情况下,'1.2.840.113556.1.4.1941' 是否代表一些唯一标识符,例如员工编号或其他东西?编辑:我阅读了您提供的链接并意识到这是一个 OID
    猜你喜欢
    • 2014-08-16
    • 2019-11-02
    • 2013-01-22
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多