HttpClient にリクエストとともに資格情報を渡すようにするにはどうすればよいでしょうか? 質問する

HttpClient にリクエストとともに資格情報を渡すようにするにはどうすればよいでしょうか? 質問する

Windows サービスと通信する Web アプリケーション (IIS でホスト) があります。Windows サービスは ASP.Net MVC Web API (自己ホスト) を使用しているため、JSON を使用して http 経由で通信できます。Web アプリケーションは偽装を行うように構成されています。これは、Web アプリケーションに要求を行うユーザーが、Web アプリケーションがサービスに要求を行うために使用するユーザーであるべきであるという考え方に基づいています。構造は次のようになります。

(赤で強調表示されているユーザーは、以下の例で参照されているユーザーです。)


ウェブアプリケーションは、Windowsサービスにリクエストを送信します。HttpClient:

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は とうまく連携する非同期 API があるのに対しTaskWebClientの非同期 API はイベントで処理する必要があるためです。

ベストアンサー1

次のように資格情報を自動的に渡すように設定できますHttpClient

var myClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });

おすすめ記事