J'ai une application web (hébergé dans IIS) qui parle à un service Windows. Le service Windows à l'aide de la ASP.Net MVC, Web API (auto-hébergé), et peuvent donc être communiqués avec sur http en utilisant JSON. L'application web est configurée pour faire de l'usurpation d'identité, l'idée étant que l'utilisateur qui en fait la demande à l'application web doit être l'utilisateur que l'application web utilise pour faire la demande sur le service. La structure ressemble à ceci:
(L'utilisateur mis en évidence en rouge est l'utilisateur mentionné dans les exemples ci-dessous).
L'application web fait des demandes pour le service Windows à l'aide d'un HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Cela en fait la demande au service de Windows, mais ne pas transmettre les informations d'identification correctement (les rapports du service à l'utilisateur en tant que IIS APPPOOL\ASP.NET 4.0
). Ce n'est pas ce que je veux.
Si je change le code ci-dessus pour utiliser un WebClient
au lieu de cela, les informations d'identification de l'utilisateur sont transmises correctement:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
Avec le code ci-dessus, les rapports de service de l'utilisateur qui en fait la demande à l'application web.
Ce que je fais de mal avec l' HttpClient
mise en œuvre qui est la cause de ne pas transmettre les informations d'identification correctement (ou est-ce un bug avec l' HttpClient
)?
La raison pour laquelle je veux utiliser l' HttpClient
, c'est qu'il a une API asynchrone qui fonctionne bien avec Task
s, alors que l' WebClient
s'asyc de l'API doit être manipulé avec les événements.