解決策はLDAPを使用することです。これにより、異なるドメインに接続して照会できるようになります。フルネームはuserprincipal(例:[email protected])に保存されます。
特定のドメイン名に対しても、どのツリーに接続するかを知る必要があります。また、ドメインがフォレスト内にない限り、純粋にユーザー名で検索している場合は、ドメインユーザー名が重複する可能性があります。
ドメインがフォレスト内にある場合は、グローバルカタログを使用してフォレストルートを検索できるショートカットがあります。その後、すべての子ドメインを検索します。ただし、検索するツリーのサイズに応じて、時間がかかることがあります。
編集
これらは私が使用したLDAPをチェックするためのいくつかのコードの断片です。あなたは何かに役立つものを組み込むことができるはずです。
LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier(_Parser.Host, _Parser.Port));
connection.Bind(new System.Net.NetworkCredential(_Parser.Username, _Parser.Password));
xは---
request = new SearchRequest();
request.Filter = query;
request.Scope = SearchScope.Subtree;
request.DistinguishedName = _Parser.SearchBase;
response = (SearchResponse)connection2.SendRequest(request);
をチョキ応答は、あなたが、あなたが興味のある項目を見つけるために列挙することができ、結果のコレクションが含まれています。
LDAPクエリは、逆ポーランドを使用しています表記&あなたが欲しいと思うのは(samaccountname=<your value here>)
です。探しているユーザー名に置き換えてください。あなたは値を引用する必要はありません。
_Parser.SearchBase
を、検索を開始するオブジェクトのdnである文字列に置き換えます。ドメイン名がsomedomain.comの場合は、おそらくdc = somedomain、dc = comのようになります。 ホストは、接続するADサーバーの名前にする必要があります。ポートは3268をグローバルカタログとして使用してください。また、読み取り専用ですみ、すべてのパーティションがあるためです。接続に使用するユーザー名を[email protected]として指定します。
userprincipalnameという名前の属性を探します。 msdnのドキュメントは、結果オブジェクトの読み方についての助けになるはずです。
サイモン
あなたが照会したいものと返す必要があるものは、私にはあまり明確ではありません。管理者がユーザーを追加したときに、どのドメインをユーザーが追加しているのかわからない場合はどうなりますか? – Tsabo
ご質問ありがとうございます。 – Dave
私は管理者によって追加された特定のユーザーのドメインを返すようにしています。管理者はユーザーのドメインを知っているはずですが、ユーザー名とともにドメイン名を自動的に追加することで人為的なエラーや時間を防ぐことができます。ありがとう – Dave