私のような質問がいくつかありましたが、実際には該当しません。私が直面しています問題は、次のとおりです。クロスドメインのアクティブディレクトリグループのメンバシップ
私は、ユーザーのグループメンバーシップを取得する必要があります:
- ドメインBにおけるグループ
- ドメインB
- でドメインA.
- サービスでのユーザーForrestからForrestへの双方向の信頼。
グループメンバーシップを取得するために
など、ユーザーがサービスに接続すると、サービスがSID、名前のWindowsIdentityオブジェクトを取得し、私はのUserPrincipalオブジェクトを使用しています。そのためには、PrincipalContextオブジェクトが必要です。 PrincipalContextオブジェクトのコンストラクタには、ドメインのFQDN(A.some.domain.comなど)が必要です。 WindowsIdentityオブジェクトには、ユーザー名にNetBiosドメイン名(つまりA \ User)が含まれていますが、DNS名を取得する方法はわかりません。
ここでは、ハードコードされた部分を取り出す必要がある、ハードコードされたDNS名を持つコードの例を示します。
- (メソッドに渡さ)WindowsIdentityウィスコンシン -
PrincipalContext context = new PrincipalContext(ContextType.Domain, "A.some.domain.com");
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.Sid, wi.User.ToString());
IはSystem.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain()名を使用して、偽装を使用する別の解決策を持っているが、それはありません偽装が利用できない可能性があるため許容されます。私は無駄に(スタックオーバーフローを含む)、MSDNとGoogleを精練数日を費やしている
TokenImpersonationLevel.Identificationで動作するソリューションを必要としています。
短い答えは、これが機能することです。これをテストするのに数時間を費やしました。私は、WindowsIdentity.Groupsプロパティから来るグループが古いか不完全である可能性があるという印象を受けました。これは当てはまりますが、ドメインの境界を越えてサービスに当たると、トークンは常に新鮮であるように見えます。いいですよ。 – DCastenholz