私はMVCアプリケーションと、関連するWeb APIプロジェクトを持っています。これらは両方ともIIS上のリモートサーバーでホストされています。それらは同じアプリケーションプールを共有します。 MVCアプリケーションからWeb APIを呼び出そうとするたびに、403エラーが発生します。これは、HttpClientHandlerによって渡された不正な資格情報から来ているようです。私は MVCアプリケーションからWeb APIを呼び出してWindows統合認証を使用する
UseDefaultCredentials = true
を持っていると私は
Credentials = CredentialCache.DefaultNetworkCredentials
を設定しようとしたが、これらのいずれもAPIリクエストが通過することができます。
私のADユーザー名/パスワードを使用するようにアプリケーションプールを設定すると、すべてのAPI要求が通過することができ、また、PostmanからAPIを直接呼び出してデータを正しく返します。
私の前提は、IIS AppPool [プール名]がリクエストで転送され、適切な資格情報が渡されないということです。とにかくこれを回避するAPIを非セキュアにすることはありません(つまり、いくつかのドメイングループだけがアクセスできるはずです)。
私が言うのはそのハードコードを見ることなくMVCアプリケーション
public async Task<HttpResponseMessage> CreateIncident(Incident model)
{
using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
{
var newIncident = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
var response = await client.PostAsync(hostUri, newIncident);
return response;
}
}
プロキシを経由していますか? – joshmcode
いいえ、これはすべて内部サーバー上でホストされ、すべての呼び出しはそのサーバーを介して排他的に行われます。プロキシはありません。私が言ったように、私のコンピュータからのPostmanとAPIへの直接呼び出しは通過しますが、.NET Coreは要求を偽装することはできません。私は最近、他の誰かがこれを最近ヒットして、 .NETコアでは古くなっている6カ月齢のものよりも優れています。 –