Wie kann ich HttpClient dazu bringen, Anmeldeinformationen zusammen mit der Anforderung zu übergeben?
Ich habe eine Webanwendung (gehostet in IIS), die mit einem Windows-Dienst kommuniziert. Der Windows-Dienst verwendet die ASP.Net MVC-Web-API (selbst gehostet) und kann daher mit JSON über http kommuniziert werden. Die Webanwendung ist für Identitätswechsel konfiguriert. Der Benutzer, der die Anforderung an die Webanwendung stellt, sollte der Benutzer sein, den die Webanwendung verwendet, um die Anforderung an den Dienst zu stellen. Die Struktur sieht folgendermaßen aus:
(Der rot hervorgehobene Benutzer ist der Benutzer, auf den in den folgenden Beispielen verwiesen wird.)
Die Webanwendung fordert den Windows-Dienst mit einem anHttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Dadurch wird die Anforderung an den Windows-Dienst gesendet, die Anmeldeinformationen werden jedoch nicht ordnungsgemäß übergeben (der Dienst meldet den Benutzer alsIIS APPPOOL\ASP.NET 4.0
).Das will ich nicht.
Wenn ich den obigen Code ändere, um a zu verwendenWebClient
Stattdessen werden die Anmeldeinformationen des Benutzers korrekt übergeben:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
Mit dem obigen Code meldet der Dienst den Benutzer als den Benutzer, der die Anforderung an die Webanwendung gestellt hat.
Was mache ich falsch mit demHttpClient
Implementierung, die dazu führt, dass die Anmeldeinformationen nicht korrekt übergeben werden (oder ist es ein Fehler mit derHttpClient
)?
Der Grund, warum ich das verwenden möchteHttpClient
ist, dass es eine asynchrone API hat, die gut funktioniertTask
s, während dieWebClient
Die asyc API von muss mit Ereignissen behandelt werden.