75 votes

Le serveur distant a renvoyé une erreur : (407) Authentification du proxy requise

J'obtiens cette erreur lorsque j'appelle un service web :

"Le serveur distant a renvoyé une erreur : (407) Proxy Authentication Required".

Je comprends l'idée générale et je peux faire fonctionner le code en ajoutant

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

ou en utilisant DefaultCredentials dans le code. Mon problème est que l'appel au service web fonctionne en production sans cela.

Il semble qu'il existe une solution non codée impliquant Machine.config, mais quelle est-elle ? Pour l'instant, je ne peux pas accéder au fichier machine.config de la machine de production pour voir à quoi il ressemble. J'ai essayé de mettre à jour mon fichier machine.config comme suit, mais j'obtiens toujours l'erreur 407.

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

140voto

seckin Points 455

Ajoutez simplement ceci à la configuration

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

0 votes

Pour ceux qui sont intéressés, c'est exactement ce dont j'avais besoin à l'intérieur d'une console NetSuite / application de services Web à partir de (ce qui semble être) une contrainte de pare-feu / proxy.

3 votes

Meilleure réponse, faites-en un détail de configuration et non un problème de code.

1 votes

Cela fonctionne toujours dans Asp.net core 2.0. J'ai dû ajouter un fichier web.config uniquement pour gérer cela.

54voto

Romil Points 10066

Dans le code suivant, nous n'avons pas besoin de coder en dur les informations d'identification.

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

0 votes

Cela a parfaitement fonctionné pour moi. Si vous ne voulez pas coder en dur votre nom d'utilisateur et votre mot de passe, essayez d'abord cette option.

0 votes

Merci, cela a fonctionné. Cependant, y a-t-il des risques de sécurité en procédant de cette façon plutôt qu'avec la méthode indiquée par Mehmet Emin ? Avec l'ajout d'informations d'identification du réseau ? Ou l'utilisation des informations d'identification du réseau donnerait-elle plus de permissions et introduirait-elle un risque de sécurité ?

1 votes

Le seul problème avec le code "Mehmet Emin" est le codage en dur des informations d'identification. Dans les mondes réels, le mot de passe est changé tous les mois en raison des menaces de sécurité, donc il faut les rendre configurables dans le fichier de configuration. Il est donc toujours bon de suivre mon travail ou j'aime aussi la méthode de Seckin.

19voto

Werner du Toit Points 171

Vérifiez avec votre expert en pare-feu. Ils ouvrent le pare-feu pour les serveurs PROD et il n'est donc pas nécessaire d'utiliser le Proxy.

Merci, votre conseil m'a aidé à résoudre mon problème :

J'ai dû définir les informations d'identification dans deux endroits pour éviter l'erreur 407 :

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

et voilà !

0 votes

Merci @Werner-du-Toit. C'est exactement ce dont j'avais besoin.

0 votes

UirTradeStream ?

6voto

Oscar Cabrero Points 2922

Il est probable que la machine ou le web.config de prod dispose des paramètres dans la configuration ; vous n'aurez probablement pas besoin de la balise proxy.

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

0 votes

Merci, j'ai essayé cela et j'obtiens toujours l'erreur "(407) Proxy Authentication Required". Est-ce que l'ajout de la section que tu énumères fait cesser l'erreur pour toi ? La seule chose qui fonctionne à coup sûr sur mon ordinateur local est de définir la propriété myProxy.Credentials dans le code.

2voto

KoturB Points 70

J'ai eu un problème similaire lié au proxy. Dans mon cas, il suffisait d'ajouter :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X