Der Remote-Server hat einen Fehler zurückgegeben: (407) Proxy-Authentifizierung erforderlich


74

Ich erhalte die folgende Fehlermeldung, wenn ich einen Webdienst aufrufe:

"Der Remote-Server hat einen Fehler zurückgegeben: (407) Proxy-Authentifizierung erforderlich".

Ich habe die allgemeine Idee und kann den Code durch Hinzufügen zum Laufen bringen

myProxy.Credentials = NetworkCredential("user", "password", "domain");

oder indem Sie DefaultCredentials im Code verwenden. Mein Problem ist, dass der Aufruf des Webdienstes in der Produktion ohne dies funktioniert.

Es scheint, als gäbe es eine Nicht-Code-Lösung mit Machine.config, aber was ist das? Im Moment kann ich nicht in die Datei machine.config der Produktionsbox gelangen, um zu sehen, wie das aussieht. Ich habe versucht, meine machine.config wie folgt zu aktualisieren, erhalte aber immer noch den Fehler 407.

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
        <bypasslist>
            <clear />
        </bypasslist>
        <proxy proxyaddress="myproxy:9000"
               usesystemdefault="false"
               bypassonlocal="true"
               autoDetect="False" />
    </defaultProxy>
</system.net>

Antworten:


139

Fügen Sie dies einfach zur Konfiguration hinzu

<system.net>
    <defaultProxy useDefaultCredentials="true" >
    </defaultProxy>
</system.net>

Für Interessenten war dies genau das, was ich in einer NetSuite-Konsolen- / Webdienstanwendung aufgrund einer Firewall- / Proxy-Einschränkung benötigte (was anscheinend der Fall ist).
dah97765

3
Beste Antwort: Machen Sie es zu einem Konfigurationsdetail und nicht zu einem Codeproblem.
McCainz

1
Dies funktioniert immer noch in Asp.net Core 2.0. Ich musste eine web.config-Datei hinzufügen, um dies zu handhaben.
jmdon

54

Im folgenden Code müssen wir die Anmeldeinformationen nicht fest codieren.

service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

Das hat perfekt für mich funktioniert. Wenn Sie Ihren Benutzernamen und Ihr Passwort nicht fest codieren möchten, versuchen Sie zuerst diese Option.
Sapbucket

Danke, das hat funktioniert. Gibt es jedoch Sicherheitsrisiken bei dieser Vorgehensweise im Vergleich zu der von Mehmet Emin gezeigten Methode? Mit dem Hinzufügen von Netzwerkanmeldeinformationen? Oder würde die Verwendung von Netzwerkanmeldeinformationen mehr Berechtigungen geben und ein Sicherheitsrisiko mit sich bringen?
Bryan

1
@Bryan Das einzige Problem mit dem 'Mehmet Emin'-Code ist die Hardcodierung der Anmeldeinformationen. In realen Welten wird das Kennwort aufgrund von Sicherheitsbedrohungen jeden Monat geändert. Machen Sie sie daher entweder in der Konfigurationsdatei konfigurierbar. Es ist also immer gut, meinen Sachen zu folgen, oder ich mag Seckin auch so.
Romil Kumar Jain

Arbeitete wie erwartet. Vielen Dank
Anshuman Jasrotia

1
@kucluk Sie haben ein Objekt des Service-Proxys erstellt. Geben Sie diesen Code ein, bevor Sie eine Servicemethode aufrufen.
Romil Kumar Jain

19

Wenden Sie sich an Ihren Firewall-Experten. Sie öffnen die Firewall für PROD-Server, sodass der Proxy nicht verwendet werden muss.

Vielen Dank, Ihr Tipp hat mir geholfen, mein Problem zu lösen:

Musste die Anmeldeinformationen an zwei Stellen einstellen, um den 407-Fehler zu überwinden:

HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password", "domain");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

und voila!


Danke @ Werner-du-Toit. Genau das brauchte ich.
inquisitive_one

uirTradeStream?
Himanshu Sharma

6

Wahrscheinlich hat die Maschine oder web.config in prod die Einstellungen in der Konfiguration; Sie werden das Proxy-Tag wahrscheinlich nicht benötigen.

<system.net>
    <defaultProxy useDefaultCredentials="true" >
        <proxy usesystemdefault="False"
               proxyaddress="http://<ProxyLocation>:<port>"
               bypassonlocal="True"
               autoDetect="False" />
    </defaultProxy>
</system.net>

Vielen Dank, ich habe dies versucht und erhalte immer noch den Fehler "(407) Proxy-Authentifizierung erforderlich". Stoppt das Hinzufügen des von Ihnen aufgelisteten Abschnitts den Fehler für Sie? Das einzige, was auf meiner lokalen Box sicher funktioniert, ist das Festlegen der Eigenschaft myProxy.Credentials im Code.
Chris

3
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;

webRequest.Proxy = WebRequest.DefaultWebProxy;

webRequest.Credentials = new NetworkCredential("user", "password");

webRequest.Proxy.Credentials = new NetworkCredential("user", "password");

Es ist erfolgreich.


uirTradeStream?
Himanshu Sharma

Hallo, ich benutze diesen Code, aber er funktioniert nicht bei webRequest.Proxy = WebRequest.DefaultWebProxy; und eine Ausnahme erhalten: (407) Proxy-Authentifizierung erforderlich. Bitte helfen Sie
user1196392

2

Ich hatte ein ähnliches Proxy-Problem. In meinem Fall war es genug hinzuzufügen:

webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

0

Ich dachte daran, diese Antwort zu schreiben, da von oben nichts funktioniert hat und Sie keinen Proxy-Speicherort angeben möchten.

Wenn Sie verwenden, sollten Sie httpClientdies berücksichtigen.

HttpClientHandler handler = new HttpClientHandler();

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
handler.Proxy = proxy;

var client = new HttpClient(handler);
// your next steps...

Und wenn Sie verwenden HttpWebRequest:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri + _endpoint);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxy;

Freundliche Referenz: https://medium.com/@siriphonnot/the-remote-server-returned-an-error-407-proxy-authentication-required-86ae489e401b

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.