0

私のユーザーは「SPR」で、dc=aaaldap,dc=com の下にあります。

今私が送信しようとしているフィルターは (アイデア: ユーザー 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

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