私のような質問をいくつか見ましたが、実際に当てはまるものはありません。私が直面している問題は次のとおりです。
User のグループ メンバーシップを取得する必要があります。
- ドメイン B のグループ
- ドメイン A のユーザー。
- ドメイン B のサービス。
- フォレストからフォレストへの双方向の信頼。
ユーザーがサービスにアタッチすると、サービスは SID や名前などを含む WindowsIdentity オブジェクトを取得します。
グループ メンバーシップを取得するために、UserPrincipal オブジェクトを使用しています。これを取得するには、PrincipalContext オブジェクトが必要です。PrincipalContext オブジェクトのコンストラクターには、ドメインの FQDN (つまり、A.some.domain.com) が必要です。WindowsIdentity オブジェクトのユーザー名 (つまり、A\User) に NetBios ドメイン名が含まれていますが、DNS 名を取得する方法がわかりません。
以下は、HARD CODED という DNS 名を持つコードの例です。これは機能しますが、ハード コーディングされた部分を取り除く必要があります。
-- WindowsIdentity wi (メソッドに渡される) --
PrincipalContext context = new PrincipalContext(ContextType.Domain, "A.some.domain.com");
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.Sid, wi.User.ToString());
System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain().Name を使用して偽装を使用する別のソリューションがありますが、偽装が使用できない可能性があるため、これは受け入れられません。TokenImpersonationLevel.Identificationで動作するソリューションが必要です
MSDN と Google (Stack Overflow を含む) を探し回るのに数日を費やしましたが、役に立ちませんでした。