¿Cómo hacer que HttpClient pase las credenciales junto con la solicitud?

Tengo una aplicación web (alojada en IIS) que habla con un servicio de Windows. El servicio de Windows utiliza la API web de ASP.Net MVC (auto hospedado), por lo que puede comunicarse a través de http utilizando JSON. La aplicación web está configurada para realizar la suplantación, y la idea es que el usuario que realiza la solicitud a la aplicación web debe ser el usuario que la aplicación web utiliza para realizar la solicitud al servicio. La estructura se ve así:

(El usuario resaltado en rojo es el usuario al que se hace referencia en los ejemplos a continuación).

La aplicación web realiza solicitudes al servicio de Windows utilizando unHttpClient:

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

Esto hace la solicitud al servicio de Windows, pero no pasa las credenciales correctamente (el servicio informa al usuario comoIIS APPPOOL\ASP.NET 4.0).Esto no es lo que quiero que suceda..

Si cambio el código anterior para usar unWebClient en cambio, las credenciales del usuario se pasan correctamente:

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

Con el código anterior, el servicio informa al usuario como el usuario que realizó la solicitud a la aplicación web.

¿Qué estoy haciendo mal con elHttpClient Implementación que está causando que no pase las credenciales correctamente. (o es un error con elHttpClient)?

La razón por la que quiero usar elHttpClient es que tiene una API asíncrona que funciona bien conTasks, mientras que elWebClientLa API de ASYC debe manejarse con eventos.

Respuestas a la pregunta(7)

Su respuesta a la pregunta