0

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

4

3 回答 3

1

要喜欢用户所属的所有组,包括嵌套组,您需要在组中搜索成员属性:

(member:1.2.840.113556.1.4.1941:=(cn=SPR,dc=aaaldap,dc=com))

-吉姆

于 2012-09-26T10:19:02.797 回答
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;

我想这就是你要找的。

干杯

于 2012-09-26T08:22:39.353 回答
0

使用 LDAP 和查询时,您有时可以获得一个引用 URL,这意味着该帐户是已知的,但在不同的域中。当我查询我们的全局目录时会发生这种情况,所以我不再这样做了。:)

这适用于我们的域here。注意我的过滤器中有逗号。

    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();
    }
于 2012-09-26T15:44:31.240 回答