我的用户是“SPR”,位于dc = aaaldap,dc = com
下现在我尝试发送的过滤器是(IDEA:提取用户SPR所属的所有组) 过滤器:
(&(objectclass=*)(memberof:1.2.840.113556.1.4.1941:=cn=SPR,dc=aaaldap,dc=com))
作为此搜索结果的一部分,我从AD服务器获得响应为ldapsearchresref(根据我的理解,这是ldap服务器的一个指示,它无法在其服务器中找到该条目,从而提供对URL的引用另一个可能有助于解决条目的服务器。)
我怀疑为什么它无法找到任何条目,我确信条目确实存在?
另外,其次,我在某处读到LDAP搜索过滤器不能用逗号。有人可以帮我这个吗?
答案 0 :(得分:1)
要查找所有组,用户是包含嵌套组的成员您需要在组中搜索成员属性:
(member:1.2.840.113556.1.4.1941:=(cn=SPR,dc=aaaldap,dc=com))
-Jim
答案 1 :(得分:0)
如果您需要找到该用户所属的所有群组,您可以使用 PrincipalContext 。
让我告诉你如何
PrincipalContext pr = new PrincipalContext(ContextType.Domain, "aaaldap.com", "dc=aaaldap,dc=com", username, password);
List<string> lst = new List<string>();
UserPrincipal user = UserPrincipal.FindByIdentity(pr, DomainId);
if (user != null)
{
PrincipalSearchResult<Principal> results = user.GetGroups();
foreach (Principal p in results)
{
lst.Add(p.ToString());
}
lst.OrderBy(item => item.ToString());
}
pr.Dispose();
return lst;
我想这就是你要找的东西。
干杯
答案 2 :(得分:0)
使用LDAP和查询时,您有时可以获得引用URL,这意味着该帐户已知,但在不同的域中。当我查询我们的全局目录时会发生这种情况,所以我不再这样了。 :)
这适用于我们的域名。注意我的过滤器中有逗号。
private static void showMemberships()
{
// instantiate the DirectoryEntry instance with the FQDN of the domain to connect to
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://CHILD.DOMAIN.ORG");
// create a DirectorySearcher object and pass the DirectoryEntry instance
DirectorySearcher ds = new DirectorySearcher(directoryObject);
// set search filter using LDAP query format
// this example fetches members for a group limiting to users only (not groups)
// and where the users are not in the stale objects ou
ds.Filter = "(&(objectCategory=User)(!ou=Stale Objects)(memberOf=CN=GROUPNAME,CN=Users,DC=CHILD,DC=DOMAIN,DC=ORG))";
// perform the search using the filter and store in a SearchResultsCollection
SearchResultCollection results = ds.FindAll();
// iterate through the results and do something with the info
foreach (SearchResult current in results)
{
string userId = current.Properties["cn"][0].ToString().Trim().ToUpper();
string userDn = current.Properties["distinguishedName"][0].ToString().Trim().ToUpper();
Console.Write(userId + " (" + userDn + ")\n");
}
// set the resource instances as released
directoryObject.Close();
directoryObject.Dispose();
}