Windowsサービスと通信するWebアプリケーション(IISでホストされている)があります。WindowsサービスはASP.NetMVCWeb API(自己ホスト型)を使用しているため、JSONを使用してhttp経由で通信できます。Webアプリケーションは、なりすましを行うように構成されています。つまり、Webアプリケーションに要求を行うユーザーは、Webアプリケーションがサービスに要求を行うために使用するユーザーである必要があります。構造は次のようになります。
(赤で強調表示されているユーザーは、以下の例で参照されているユーザーです。)
Webアプリケーションは、HttpClient
:を使用してWindowsサービスに要求を行います。
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
これにより、Windowsサービスに要求が送信されますが、資格情報は正しく渡されません(サービスはユーザーをとして報告しますIIS APPPOOL\ASP.NET 4.0
)。これは私がしたいことではありません。
上記のコードをWebClient
代わりに使用するように変更すると、ユーザーの資格情報が正しく渡されます。
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
上記のコードを使用すると、サービスはユーザーをWebアプリケーションにリクエストしたユーザーとして報告します。
HttpClient
クレデンシャルを正しく渡さない原因となっている実装で何が間違っているのですか(またはのバグHttpClient
ですか?)
私が使用したい理由HttpClient
は、sでうまく機能する非同期APIがあるTask
のに対し、WebClient
'sasycAPIはイベントで処理する必要があるためです。