2016-04-26 17 views
1

私はこの問題に対処するための多くの質問を見てきましたが、何も動かないようです。私はmvc WebアプリケーションからWeb APIサービスを呼び出そうとしています。これは私のクライアントコードです:Windows認証を使用してMVCからWeb APIサービスを呼び出す方法

var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }) 
{ 
    BaseAddress = baseAddress 
}; 
var response = await client.GetAsync("items/5"); 

ローカルで実行すると、動作します。プロジェクトをサーバーに公開すると、apiは常に401 Unauthorizedを返します。私はIISのWeb APIとMVCプロジェクトでWindows認証を有効にしました。 mvcアプリケーションからapiに正しいWindows資格情報を取得するにはどうすればよいですか? web apiとmvc appは同じIISサーバー上で実行されています。

+0

http://example.com/api 

からBASEADDRESSを変更することで、これを固定しましたか?別のWebアプリケーション?コンソールアプリケーション?ここで正しい認証を設定します。 –

+0

@CamBruceこのクライアントコードはmvcウェブアプリケーションによって実行されています –

答えて

2

偶然、MVCのアプリが同じWindows資格情報を使用してWebAPIのへのすべての要求を行うことができ、場合、私はあなただけのドメインのユーザーとして実行するようにIISのアプリケーションプールを構成することができるはずだと思います。既定では、IISのアプリケーションプールはコンピュータのローカルアカウントとして実行されます。そのため、ネットワーク経由でWindows認証済みリソースへの要求を試みると、リモートマシンはWebサーバーのマシンローカルアカウントを認識しません。したがって、不正なエラー。

MVCアプリにMVCアプリにリクエストしたユーザーとしてWebAPIを呼び込ませたい場合は、web.configで偽装を有効にする必要があります。また、Kerberos/Active Directoryが動作する方法(Kerberosダブルホップを参照)のために、ドメイン管理者にWebサーバーマシンのKerberos委任を有効にする必要があります。

0

問題は、完全修飾ドメイン名を使用して、同じマシンにリクエストを送信しよう明らかならば、要求は自動的に反射攻撃から保護するために失敗するということでした。

は、私は、このアプリケーションコードが実行されているどのような文脈では

http://localhost/api 
関連する問題