次の 2 つのツリーを持つ AD フォレストがあります。
- ドメイン 1。Domain2 と Domain3 の 2 つの子ドメインがある
- ドメイン 4。子ドメインはありません。
Domain1 の DNS 名はdomain1.localです。Domain4 の DNS 名はdomain4.localです。
各ドメインには、グローバル カタログが有効になっているドメイン コントローラがあります。
ドメイン 4 からユーザーの UserPrincipal をその SID で取得しようとしています。プログラムは Domain2 のマシンから実行されます。
次のコードを使用します。
// Running on some machine from Domain2
PrincipalContext context = new PrincipalContext(
ContextType.Domain,
"dc2.domain2.domain1.local:3268", // Using Global Catalog port and local domain controller
"DC=domain1, DC=local", // I guess the problem is here
"domain1\\super-admin", // User has all necessary rights across all domains
"password");
UserPrincipal principal = UserPrincipal.FindByIdentity(context, "SID-OF-A-USER-FROM-DOMAIN-4");
私の場合、プリンシパルは null です (ユーザーが見つかりませんでした)。
1 つのツリー (domain1 とその子) 内での検索は上記のコード スニペットで問題なく機能しますが、フォレスト全体の検索を実際に有効にするために PrincipalContext コンストラクターのコンテナー パラメーターを変更する方法がわかりません。
当初、「DC=domain1, DC=local」はフォレスト ルートを指していると思っていましたが、ここで誤解しているようです。
また、コンテナー パスを "DC=domain4, DC=local" に変更すると、検索が機能することはわかっていますが、ドメイン 4 のユーザーに対してのみです。
しかし、フォレスト全体を指すコンテナー パスが本当に必要なので、同じ PrincipalContext を使用してフォレスト内の任意のドメインからユーザーを検索できます。
特に私の要件が達成可能かどうかを誰かが明確にすることができれば、どんな助けも大歓迎です。