递归检查AD组中的用户

时间:2014-02-02 20:32:15

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

我正在尝试在C#中编写一个带有用户名和AD组名的Web服务,结果返回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中有一个名为Bob的用户。

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

让我们说用户Bob也在AD Group OtherGroup中。所以我将Bob从TestGroup中取出,但将OtherGroup添加到TestGroup。所以现在技术上Bob在TestGroup,但不是直接。

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

这是我需要帮助的地方。我需要这个场景是真的。抓住我的漂移?有什么建议吗?

1 个答案:

答案 0 :(得分: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是您感兴趣的用户的专有名称。