36

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

これが私の正確な問題です:

これは動作します

作業シナリオ

これは機能しません

動作しないシナリオ

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

私が試したこと

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

この問題を解決するために私が何ができるかについて誰かが何か考えを持っていますか?

4

2 に答える 2

18

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

于 2013-02-19T19:22:46.893 に答える
4

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

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

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

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

于 2013-02-19T17:10:19.363 に答える