2017-12-06 11 views
1

私はちょっと変わった動作を発見しました。なぜ私のコードがこのように動作するのか説明していますか?HttpClientを使用してlocalhost上で残りのapiを呼び出すと、401が不正になり、IIS 8.5

私のシナリオはこれです:私は2つの残りのAPIをC#で作成し、CoreApiとFrontApiと呼ぶことができます。どちらのapiも同じサーバー上に別々のサイトとappPoolsを持ち、両方のappPoolがNetworkServiceとして実行されています。 FrontApiはHttpClientを使用してCoreApiを呼び出します。私はFrontApiのValuesControllerを呼び出すことによって呼び出しをトリガーし、次にCoreApiを呼び出します。 CoreApiはWindows認証を有効にしていますが、FrontApiは匿名認証を持っています。

私の開発マシンでFrontApiをホストすると、すべて正常に動作しますが、FrontApiがCoreApiを呼び出すと、完全なURLを使用して同じサーバー上でコホスティングすると401.0 Unauthorizedが発生します。 FrontApiから "http://localhost/api/values"を使用すると問題なく動作します。

どのような考えですか?

+0

は、あなたのdevの環境やIISサーバー上で作業localhostですか? – lloyd

+0

iisサーバー。奇妙な動作をする唯一のシナリオは、同じマシン上で両方のサービスをホストし、URLに完全なドメイン名を使用することです。 – Snorre

答えて

0

CredentialCache.DefaultNetworkCredentialsプロパティは、FrontApi IISアプリケーションプールが実行されている資格情報を返します。 CoreApiはFrontApiのApplicationPoolIdentityを認証する方法を知らないが、NetworkServiceを認証できるはずです。

アプリケーションプールIDをApplicationPoolIdentityからNetworkServiceに変更すると、CoreApiからの401応答が修正されるはずです。

enter image description here enter image description here

関連する問題