ldap嵌套组成员资格

时间:2012-09-25 12:32:28

标签: active-directory ldap

我的用户是“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搜索过滤器不能用逗号。有人可以帮我这个吗?

3 个答案:

答案 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();
    }