407-Authentifizierung erforderlich - keine Herausforderung geschickt
Update:
Wenn Sie gerade erst angekommen in dieser Frage, die Allgemeine Kernaussage ist, dass ich versuche, mich ein HttpWebRequest über einen proxy, und ich bin immer ein 407 von unserer seltsamen proxy-server. IE,Firefox,Chrome alle verwalten die Aushandlung der proxy-erfolgreich, wie die Adobe-Air-Anwendungen. Es kann wichtig sein, dass der Google Chrome web-installer nicht wirklich und wir haben die Verwendung einer offline-installer.
Dank an Ian ' s link habe ich es immer durch auf die nächste Stufe. Es ist jetzt das senden eines token zurück an den proxy, allerdings die 3. Stufe ist nicht immer durch, so dass die Anfrage mit dem Nutzernamen/Passwort-hash wird nicht gesendet .NET und somit keine HTML zurückgegeben wird.
Ich bin mit:
- IE6 user-agent
- Windows 7
- Scansafe proxy
- .NET 3.5
Hier ist der neueste code, entspricht die Protokolle unter:
HttpWebRequest request = HttpWebRequest.Create("http://www.yahoo.com") as HttpWebRequest;
IWebProxy proxy = request.Proxy;
//Print the Proxy Url to the console.
if (proxy != null)
{
//Use the default credentials of the logged on user.
proxy.Credentials = CredentialCache.DefaultCredentials;
}
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.Accept = "*/*";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream stream = response.GetResponseStream();
Ausnahme
WebException (407) Authentication Required.
Der proxy verwendet wird
Der proxy-client ist ein Scansafe hardware in unseren server-Raum, der (nach der Authentifizierung mit NTLM) leitet dann Ihre HTTP-Datenverkehr zu seinen Servern zu filtern Sie den Datenverkehr.
System.Net tracing-Ausgabe
IE erfolgreich Verhandlungen über den proxy
Die Lösung
Ich habe nicht wirklich eine Lösung gefunden aber Dank Feroze und Eric habe ich einen workaround gefunden und entdeckt, dass der eigentliche proxy (und nicht deren Einstellungen) ist das Hauptproblem. Es kann sein, ein obskures Problem mit 3 Variablen: .NET HttpWebRequest-Implementierung, Windows-7 und natürlich der Scansafe-hardware-client, der sitzt in unserem Schrank, aber ohne ein MSDN-support-Anfrage werde ich nicht herausfinden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, legen Sie die Anmeldeinformationen für den proxy, sollten Sie nicht legen Sie die Anmeldeinformationen in der Anforderung.Proxy-Objekt, anstatt das request-Objekt?
http://msdn.microsoft.com/en-us/library/system.net.webproxy.credentials.aspx
Beachten Sie auch, dass Sie brauchen, um einen HTTP/1.1 request (oder technisch gesehen, wird jede Anfrage mit Keep-Alive) erfolgreich verwenden NTLM/Negotiate-Authentifizierung.
(Fiddler ' s "Auth" Inspektor zerlegen Sie die NTLM-Authentifizierung-blobs für Sie, wenn Sie noch nicht einen Blick auf die noch.)
HttpWebRequest#39785641 - Request: GET http://www.yahoo.com/ HTTP/1.1
Schrieb ich ein Programm zur Decodierung der NTLM-blobs, die gesendet wurden, in IE und HttpWebRequest-Sitzungen.
Wenn ich mir die HttpWebRequest " und " IE, Sie beide Anfrage 56bit-und 128-bit-Verschlüsselung vom server. Hier ist der dump der Sitzung mithilfe der HttpWebRequest -
Hier ist der dump vom IE:
In IE/HttpWebRequest, Sie fordern beide 64 & 128-bit-Sicherheit. Jedoch, für windows7, 128-bit-Sicherheit für NTLM erfolgt ist, wird der Standard, und ohne diese, wird die Authentifizierung fehlschlagen. Wie Sie sehen können aus der Antwort des Servers, der server ist nur die Unterstützung der 64bit-Verschlüsselung.
Den folgenden link, hat eine Diskussion über ein ähnliches problem gestoßen durch eine andere person.
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/f68e8878-53e9-4208-b589-9dbedf851198
Den Grund, dass der IE funktioniert, statt der managed app, ist, dass der IE eigentlich nicht verlangen NTLMSSP_NEGOTIATE_SEAL | NTLMSSP_NEGOTIATE_SIGN, die am Ende erzwingen der Verschlüsselung. Allerdings HttpWebRequest nicht verlangen beide SIEGEL|ZEICHEN. Dies erfordert 128-bit-Verschlüsselung, in der Erwägung, dass die Art und Weise IE initialisiert die NTLMSSP (ohne DICHTUNG & SCHILD), bedeutet es nicht, dass eine Verschlüsselung erforderlich ist. Also IE funktioniert, in der Erwägung, dass HttpWebRequest nicht. (siehe den link oben)
Ich denke, dass wenn Sie änderungen an Ihrer security-policy zu ermöglichen 64bit Verschlüsselung für NTLM, Ihrem verwalteten code, app funktioniert. Oder alternativ, Fragen Sie den proxy-Anbieter unterstützen die 128-bit-Verschlüsselung für NTLM.
Hoffe, das hilft.
Ich hatte ein ähnliches Problem und verwendet die Tipps in den folgenden blog-post um das problem zu lösen:
http://blogs.msdn.com/jpsanders/archive/2009/03/24/httpwebrequest-webexcepton-the-remote-server-returned-an-error-407-proxy-authentication-required.aspx
Überprüfen Sie die folgende Einstellung in
secpol.msc
. Es fixiert unsere Problem.Festgelegt:
Können Sie versuchen, die Einstellung der User-Agent-header auf der HttpWebRequest-Klasse, um den gleichen Wert, der IE8 ist Einstellung?
Manchmal, Servern, nicht herausfordern, richtig, wenn der user-agent ist nicht, was Sie erwarten.
hoffe, das hilft.
Ist es die Art und Weise der proxy zugewiesen ist?
Als ich zuletzt verwendeten proxy mit der HttpWebRequest-Klasse es zugeordnet war, wie diese:
Erteilung der Vollmacht zu verlangen:
Ruft die Methode:
Konfigurieren der proxy im web.config
Könnte es damit zusammenhängen, was in deinem "CredentialCache". Versuchen Sie dies:
Wie wäre es damit: