2009-06-15 14 views
6

私は2つのActive DirectoryドメインAとBを持っています。ドメインAのユーザーは、ドメインBのサーバーにあるリソースを表示して操作するために、デスクトップ上でアプリケーションを実行する必要があります。各ユーザのドメインBのアイデンティティを偽装して、プログラムによってドメインBのリソース上で操作を実行することは可能ですか?.NETの別のActive Directoryドメインにユーザーを偽装できますか?

ワークフロー例:ドメインAに中

  1. ユーザーがログイン
  2. ユーザーは、デスクトップアプリケーションを起動します。
  3. ユーザーはドメインBのリソースを指定します。
  4. アプリケーションはドメインBの資格情報をユーザーに要求します。
  5. アプリケーションは、指定されたリソースにアクセスするためにユーザーのドメインB IDを偽装します。
  6. ユーザーはアプリケーションを使用してドメインBリソースを操作します。

答えて

2

私はWin32 APIに関して言及しますが、.NETからこれらを呼び出すことができると確信しています。チェックhttp://pinvoke.net

ユーザーのドメインB資格情報を表すアクセストークンを作成するには、LogonUser APIを呼び出す必要があります。

次に、ImpersonateLoggedOnUserを呼び出し、そのアクセストークンを渡します。呼び出し元のスレッドは、別の資格情報を偽装するか、RevertToSelf APIを呼び出すまで、ドメインBの資格情報を偽装します。

私はそれがあなたのコンピュータ(偽装をしている1)がメンバーである場合に成功するにLogonUserの呼び出しのために、あなたが実行しているマシンがドメインB

+0

それは逆のことではありません。つまり、ドメインBはドメインAを信頼する必要はありませんか? –

+0

いいえ、私はそうは思わない。ドメインAとドメインBの間には信頼関係は存在しませんが、マシンがどのドメインに属しているかによって、言及していない他の信頼の必要性があるかもしれません。 – Martin

+0

LogonUserはリモートユーザーを認証しないことを理解しています。 WindowsImpersonationContextでこのメソッドを使用しようとしましたが、失敗しました。 LogonUser:http://msdn.microsoft.com/en-us/library/aa378184(VS.85).aspx これが当てはまらない場合、私は自分の問題が他の場所にあると思っています。これは、2つのドメイン間の信頼の問題かもしれません。私はそれを確認します。 –

1

this questionをご覧ください。必要な偽装の問題が記載されています。

+0

私はその質問とそれが提供するリンクを見ました。彼らは私の質問に十分に答えなかった。見つかるサンプルのほとんどは、わかっているようにリモートコンピュータに対して認証されないLogonUserメソッドに依存しています。 –

7

を信頼する必要がありますが、ことは言うまでもないと思います偽装しようとしているユーザーアカウントのドメインを信頼しないドメインの場合、偽装は失敗します。そうでないと言う人は、私は証拠を見たいと思っています。

+0

正確です。あなたがする必要があるのは、2つのADドメイン間の信頼を確立することです。これはやりにくいことではありませんが、両者の間のセキュリティを大幅に "開放"し、 "中立的"な決定ではありません。それには多くの意味があります。あなたが信頼関係を持って偽装する必要があるかどうかは分かりませんが、そうしなければ非常に驚くでしょう。しかし、あなたが信用を持っているなら、それがうまくいくことは分かっています(それは私が過去2週間でコードしなければならなかったものです)。 –