C# AD组中用户的递归检查

C# AD组中用户的递归检查,c#,.net,active-directory,active-directory-group,C#,.net,Active Directory,Active Directory Group,我正在尝试用C#编写一个web服务,它使用用户名和广告组名,结果返回true或false。现在我正在做一些事情来达到这个效果 public static Boolean CheckGroupForUser(String username, String groupname) { Boolean Success = false; try { using (PrincipalContext oPrincipalContext

我正在尝试用C#编写一个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的广告组。TestGroup中有一个名为Bob的用户

CheckGroupForUser("Bob","TestGroup"); //true
假设用户Bob也在广告组OtherGroup中。所以我将Bob从TestGroup中取出,但将OtherGroup添加到TestGroup中。所以从技术上讲,Bob现在在测试组中,但不是直接在测试组中

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

这就是我需要帮助的地方。我需要这个场景是真实的。明白我的意思吗?有什么建议吗?

如果您使用
System.DirectoryServices
您可以这样做

基本上,您使用的过滤器如下:

(member:1.2.840.113556.1.4.1941:=userDN)

其中userDN是您感兴趣的用户的可分辨名称。

请原谅我的无知,但在本例中,“1.2.840.113556.1.4.1941”是否表示员工编号或其他唯一标识符?编辑:我读了你提供的链接,意识到这是一个OID