C# AD组中用户的递归检查
我正在尝试用C#编写一个web服务,它使用用户名和广告组名,结果返回true或false。现在我正在做一些事情来达到这个效果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
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