Wie kann ich die Authentifizierung mit HttpWebRequest verdauen?

Verschiedenen Artikeln (Eins, Zwei) entdeckte ich machen diesen look einfach genug:

WebRequest request = HttpWebRequest.Create(url);

var credentialCache = new CredentialCache();
credentialCache.Add(
  new Uri(url), //request url
  "Digest", //authentication type
  new NetworkCredential("user", "password") //credentials
);

request.Credentials = credentialCache;

Allerdings funktioniert dies nur für URLs ohne URL-Parameter. Ich kann zum Beispiel download http://example.com/test/xyz.html ganz gut, aber wenn ich versuche, die download http://example.com/test?page=xyz, das Ergebnis ist ein 400 Bad Request-Nachricht mit dem folgenden in den server-logs (Apache 2.2):

Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>

Meine erste Idee war, dass die digest-Spezifikation erfordert, URL Parameter entfernt werden, aus dem hash-digest -- aber das entfernen der parameter aus der URL übergeben credentialCache.Add() nicht ändern, eine Sache. Also muss es anders herum sein und irgendwo in der .NET framework ist falsch das entfernen der parameter aus der URL.

Kommentar zu dem Problem
Hier ist eine ähnliche Frage, ALSO meine erste Suche hat nicht mit zu kommen: stackoverflow.com/questions/3109507/... Kommentarautor: Cygon
Und ein Microsoft-Connect-bug-report: connect.microsoft.com/VisualStudio/feedback/details/571052/... Kommentarautor: Cygon
Der Microsoft Connect-bug-report oben verlinkten scheint ein workaround gepostet 6/26. Hast du das ausprobiert? Kommentarautor: Samuel Meacham
Ja, das würde es lösen. Jedoch, es ist wirklich eine Abhilfe in dem Sinne, dass es reimplements Funktionalität der .NET-Framework. Ich hatte gehofft, dass es nur ein Fehler in meiner Verwendung der HttpWebRequest-Klasse. Kommentarautor: Cygon
Es gibt sogar einen hack in die Apache-mod_auth_digest (das Modul führt, dass die digest-Authentifizierung) zu arbeiten, um diese sehr gleiche Problem passiert mit dem Internet Explorer: httpd.apache.org/docs/2.0/mod/mod_auth_digest.html#msie Kommentarautor: Cygon

InformationsquelleAutor der Frage Cygon | 2010-07-03

Schreibe einen Kommentar