web-dev-qa-db-ja.com

Kerberosダブルホップの問題を修正するにはどうすればよいですか?

Webアプリケーション内からWebサービスを呼び出すのに問題があり、ここの誰かが助けてくれることを望んでいました。私が言えることから、これはseems Kerberosと何か関係がある double-hop issue 。しかし、もしそうなら、私は実際に問題を解決するために何をすべきかわからない。物事を難しくするために、Active Directoryアカウントを変更するための適切なアクセス許可がないため、変更を要求するときに何を尋ねるかを知る必要があります。私の状況では、Webサービスが適切なユーザーコンテキストで実行されるように、WebアプリケーションからバックエンドWebサービスに資格情報(統合Windows認証)を渡す必要があります。

私の正確な問題は次のとおりです。

これは動作します

Working scenario

これは機能しません

Non-working scenario

only動作シナリオと非動作シナリオの違いは、動作シナリオがローカルホスト(開発者のPCまたは問題のサーバー)でアプリケーションを実行していることと、動作しないシナリオの例です。別のマシンで実行しています。両方のシナリオ間のコードはまったく同じです。

試したこと

  1. 各サーバーのアプリプールを実行するドメインアカウントにSPNを追加する_setspn -a http/server1 DOMAIN\account_
  2. 偽装のさまざまな方法
  3. 偽装コードusing(...)を削除し、アプリプールアカウントとしてWebサービス呼び出しを実行します。これは期待どおりに機能します。

この問題を解決するために私ができることについて誰にもアイデアがありますか?

31
Steve Platz

中間サーバーは委任に対して信頼されている必要があります。それ以外の場合、資格情報は委任されず、中間サーバーは元のクライアントを偽装できません。

14
Michael-O

多くの場合、その理由は、サーバー1がサーバー2に委任トークンを渡さないことです。したがって、サーバー2がその認証チケットを使用して別の場所(おそらくSQLサーバー)に移動しようとすると失敗します。

WCF呼び出しの偽装レベルを設定する必要があります

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

http://msdn.Microsoft.com/en-us/library/system.servicemodel.security.windowsclientcredential.allowedimpersonationlevel.aspx

3
Knaģis