Как заставить HttpClient передавать учетные данные вместе с запросом?

У меня есть веб-приложение (размещенное в IIS), которое взаимодействует со службой Windows. Служба Windows использует веб-API ASP.Net MVC (самодостаточный), поэтому с ней можно обмениваться данными через http с помощью JSON. Веб-приложение сконфигурировано для выполнения олицетворения, идея в том, что пользователь, который отправляет запрос веб-приложению, должен быть пользователем, которого веб-приложение использует для выполнения запроса к службе. Структура выглядит так:

(The user highlighted in red is the user being referred to in the examples below.)

Веб-приложение отправляет запросы в службу Windows, используяHttpClient:

var httpClient = new HttpClient(new HttpClientHandler() 
                      {
                          UseDefaultCredentials = true
                      });
httpClient.GetStringAsync("http://localhost/some/endpoint/");

Это делает запрос к службе Windows, но не передает учетные данные правильно (служба сообщает пользователю какIIS APPPOOL\ASP.NET 4.0). This is not what I want to happen.

Если я изменю код выше, чтобы использоватьWebClient вместо этого учетные данные пользователя передаются правильно:

WebClient c = new WebClient
                   {
                       UseDefaultCredentials = true
                   };
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));

С помощью приведенного выше кода служба сообщает о пользователе как о пользователе, который сделал запрос к веб-приложению.

What am I doing wrong with the HttpClient implementation that is causing it to not pass the credentials correctly (или это ошибка сHttpClient)?

The reason I want to use the HttpClient is that it has an async API that works well with Tasks, whereas the WebClient's asyc API needs to be handled with events.

Ответы на вопрос(7)

Ваш ответ на вопрос