Frage

Update:
Wenn Sie gerade in dieser Frage angekommen sind, ist der allgemeine Kern, dass ich versuche, eine HttpWebRequest über einen Proxy zu machen, und ich bin ein 407 aus unserem seltsamen Proxy-Server zu bekommen. IE, Firefox, Chrome alle verwalten den Proxy erfolgreich zu verhandeln, wie Adobe Air-Anwendungen tun. Es kann wichtig sein, dass der Google Chrome Web-Installer tatsächlich ausfällt, und wir müssen ein Offline-Installationsprogramm verwenden.

Dank Ians Link muss ich es in die nächste Stufe zu bekommen. Es wird nun ein Token zurück an den Proxy zu senden, aber die dritte Stufe nicht immer durch, so dass die Anforderung mit dem Benutzername / Passwort-Hash wird nicht von .NET gesendet werden und folglich wird kein HTML zurückgegeben.

Ich bin mit:

  • IE6 User-Agent
  • Windows 7
  • Proxy-Scansafe
  • .NET 3.5

Hier ist der letzte Code, der im folgenden anhand der Protokolle entspricht:

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();

Die Ausnahme

  

WebException (407) Authentifizierung erforderlich.

Der Proxy verwendet wird

Der Proxy-Client ist ein Scansafe Hardware-Gerät in unserem Serverraum, der (einmal authentifiziert mit NTLM), dann leitet den HTTP-Datenverkehr auf seinen Servern, den Verkehr zu filtern.

System.Net Verfolgungsausgabe

IE erfolgreich Verhandlungen über den Proxy

Die Lösung

Ich habe gefunden, nicht wirklich eine Lösung, aber dank Feroze und Eric Ich habe eine Abhilfe und entdeckt festgestellt, dass die tatsächliche Proxy (und dessen Konfiguration nicht) ist das Hauptproblem. Es kann eine obskure Problem mit 3 Variablen sein: .NET HttpWebRequest-Implementierung, Windows 7 und natürlich der Scansafe Hardware-Client, der in unserem Rack sitzt; aber ohne MSDN Support-Anfrage werde ich nicht herausfinden.

War es hilfreich?

Lösung

Wenn Sie die Anmeldeinformationen für den Proxy einstellen möchten, sollten Sie nicht gesetzt Anmeldeinformationen auf dem request.Proxy Objekt anstatt das Request-Objekt?

http://msdn.microsoft.com/ en-us / library / system.net.webproxy.credentials.aspx

Auch bedenken Sie, dass Sie benötigen eine HTTP / 1.1-Anforderung (oder technisch, jede Anfrage mit Keep-Alive-) zu machen, um erfolgreich NTLM / Verhandeln Authentifizierung.

(Fiddlers „Auth“ Inspektor wird die NTLM-Authentifizierung Blobs für Sie zersetzen, wenn man nicht einen Blick auf das noch genommen haben.)

Andere Tipps

Ich schrieb ein Programm, um den NTLM-Blobs zu entschlüsseln, die Sitzungen im IE und HttpWebRequest gesendet wurden.

Wenn ich mir die HttpWebRequest und IE, sie beide Anfrage 56bit und 128bit Verschlüsselung vom Server. Hier ist die Dump der Sitzung mit HttpWebRequest

==== Type1 ----
Signature: NTLMSSP
Type: 1
Flags: E20882B7
NTLMSSP_NEGOTIATE_56
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP_NEGOTIATE_128
RESERVED2
RESERVED3
RESERVED4
NTLMSSP_REQUEST_NON_NT_SESSION_KEY
NTLMSSP_TARGET_TYPE_DOMAIN
NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
NTLMSSP_NEGOTIATE_DATAGRAM
NTLMSSP_REQUEST_TARGET
NTLM_NEGOTIATE_OEM
NTLMSSP_NEGOTIATE_UNICODE)
Domain :
Workstation:
==== Type2 ----
Signature: NTLMSSP
Type: 2
Flags: 201
NTLMSSP_NEGOTIATE_56
NTLMSSP_REQUEST_NON_NT_SESSION_KEY)
Context: D32FDDCB:63507CFA

Hier ist die Müllhalde von IE:

==== Type1 ----
Signature: NTLMSSP
Type: 1
Flags: A208B207
NTLMSSP_NEGOTIATE_56
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP_NEGOTIATE_128
NTLMSSP_REQUEST_NON_NT_SESSION_KEY
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_TARGET_TYPE_SHARE
NTLMSSP_TARGET_TYPE_DOMAIN
NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
NTLMSSP_NEGOTIATE_DATAGRAM
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_UNICODE)
Domain : XXXX.UK
Workstation: XXX-X31
==== Type2 ----
Signature: NTLMSSP
Type: 2
Flags: 201
NTLMSSP_NEGOTIATE_56
NTLMSSP_REQUEST_NON_NT_SESSION_KEY)
Context: D32FDDCB:63507CFA

In beiden IE / HttpWebRequest, fordern sie beide 64 & 128-Bit-Sicherheit. Doch für Windows7, 128-Bit-Sicherheit für NTLM wurde den Standard gemacht, und ohne dass, schlägt die Authentifizierung fehl. Wie Sie aus der Antwort des Servers sehen können, ist der Server nur 64-Bit-Verschlüsselung unterstützen.

Der folgende Link hat eine Diskussion über ein ähnliches Problem von einer anderen Person begegnet. http: //social.msdn .microsoft.com / Foren / en-US / ncl / thread / f68e8878-53e9-4208-b589-9dbedf851198

Der Grund, dass IE funktioniert, anstelle der verwalteten App ist, dass der IE nicht wirklich NTLMSSP_NEGOTIATE_SEAL anfordern | NTLMSSP_NEGOTIATE_SIGN, die Verschlüsselung erfordern enden. Allerdings ist HttpWebRequest sowohl SEAL anfordern | SIGN. Dies erfordert 128-Bit-Verschlüsselung, während die Art und Weise IE die NTLMSSP initialisiert (ohne SEAL & SIGN), spielt es keine Verschlüsselung erfordern. Daher arbeitet IE, während HttpWebRequest nicht. (Siehe Link oben)

Ich glaube, dass, wenn Sie Ihre Sicherheitsrichtlinien ändern 64bit-Verschlüsselung für NTLM, Ihr verwalteten Code App funktionieren zu können. Oder alternativ, fragen Sie den Proxy-Anbieter 128-Bit-Verschlüsselung für NTLM zu unterstützen.

Hope, das hilft.

Ich habe ein ähnliches Problem und verwendet, um die Spitzen in der folgenden Blog-Post, 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 unser Problem.

Local Security Policy 
    Local Policies
        Security Options
            Network security: Minimum session security

Stellen an:

require 128 only for client. 

eingeben Bild Beschreibung hier

Können Sie den User-Agent-Header versuchen Einstellung auf Ihrem HttpWebRequest, auf den gleichen Wert, dass IE8 setzt?

Manchmal Server nicht richtig herausfordern, wenn der User-Agent ist nicht das, was sie erwarten.

hoffe, das hilft.

Ist es die Art und Weise der Proxy zugeordnet ist?

proxy.Credentials = CredentialCache.DefaultCredentials;

Als ich zuletzt verwendete Proxy mit der HttpWebRequest es wie folgt zugewiesen wurde:

Weisen Sie Proxy Anfrage:

request.Proxy.Credentials = Credentials.GetProxyCredentials();

Anrufe Methode:

    public static ICredentials GetProxyCredentials()
    {
        return new NetworkCredential(AppConstants.Proxy_username, AppConstants.Proxy_password);
    }

Configure Proxy in web.config

<system.net>
  <defaultProxy enabled="true">
    <proxy
      autoDetect="False"
      bypassonlocal="True"
      scriptLocation="http://www.proxy.pac"
      proxyaddress="http://proxy1.blah.com" />
  </defaultProxy>
</system.net>

Es könnte verwandt sein, was in Ihrem „CredentialCache“ ist. Versuchen Sie stattdessen:

proxy.Credentials = new NetworkCredential("username", "pwd", "domain"); 

Wie wäre es damit:

        HttpWebRequest request = HttpWebRequest.Create("http://www.yahoo.com") as HttpWebRequest;
        WebProxy proxyObject = new System.Net.WebProxy("http://10.0.0.1:8080/", true); //whatever your proxy address is

        proxyObject.Credentials = CredentialCache.DefaultCredentials;
        request.Proxy = proxyObject;

        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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top