web-dev-qa-db-fra.com

Est-il possible de spécifier des informations d'identification de proxy dans votre web.config?

Je dois configurer un site Web pour accéder à un service Web sur une autre machine, via un proxy. Je peux configurer le site Web pour utiliser un proxy, mais je ne trouve pas de moyen de spécifier les informations d'identification requises par le proxy, est-ce possible? Voici ma configuration actuelle:

<defaultProxy useDefaultCredentials="false">
    <proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>

Je sais que vous pouvez le faire via du code, mais le logiciel que le site Web exécute est un CMS à source fermée, donc je ne peux pas le faire.

Est-ce qu'il y a un moyen de faire ça? MSDN ne m'aide pas beaucoup ..

58
spmason

Oui, il est possible de spécifier vos propres informations d'identification sans modifier le code actuel. Cela nécessite cependant un petit morceau de code de votre part.

Créez un assembly appelé SomeAssembly.dll avec cette classe:

namespace SomeNameSpace
{
    public class MyProxy : IWebProxy
    {
        public ICredentials Credentials
        {
            get { return new NetworkCredential("user", "password"); }
            //or get { return new NetworkCredential("user", "password","domain"); }
            set { }
        }

        public Uri GetProxy(Uri destination)
        {
            return new Uri("http://my.proxy:8080");
        }

        public bool IsBypassed(Uri Host)
        {
            return false;
        }
    }
}

Ajoutez ceci à votre fichier de configuration:

<defaultProxy enabled="true" useDefaultCredentials="false">
  <module type = "SomeNameSpace.MyProxy, SomeAssembly" />
</defaultProxy>

Cela "injecte" un nouveau proxy dans la liste, et comme il n'y a pas d'informations d'identification par défaut, la classe WebRequest appellera d'abord votre code et demandera vos propres informations d'identification. Vous devrez placer l'assembly SomeAssembly dans le répertoire bin de votre application CMS.

Il s'agit d'un code statique et pour obtenir toutes les chaînes comme l'utilisateur, le mot de passe et l'URL, vous devrez peut-être implémenter les vôtres ConfigurationSection , ou ajouter des informations dans AppSettings =, ce qui est beaucoup plus facile.

100
Jerome Laban

Bien que je n'aie pas trouvé un bon moyen de spécifier les informations d'identification du réseau proxy dans le web.config, vous pourriez constater que vous pouvez toujours utiliser une solution non codante, en l'incluant dans votre web.config:

  <system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
    </defaultProxy>
  </system.net>

L'ingrédient clé pour y parvenir est de modifier les paramètres IIS, en veillant à ce que le compte qui exécute le processus ait accès au serveur proxy. Si votre processus s'exécute sous LocalService ou NetworkService, alors cela ne fonctionnera probablement pas. Il y a de fortes chances que vous souhaitiez un compte de domaine.

18
Scott Ferguson

Vous pouvez spécifier des informations d'identification en ajoutant une nouvelle information d'identification générique de votre serveur proxy dans le gestionnaire d'informations d'identification Windows:

1 Dans Web.config

<system.net>    
<defaultProxy enabled="true" useDefaultCredentials="true">      
<proxy usesystemdefault="True" />      
</defaultProxy>    
</system.net>
  1. Dans le gestionnaire d'informations d'identification >> Ajouter une information d'identification générique

Adresse Internet ou réseau: votre adresse proxy
Nom d'utilisateur: votre nom d'utilisateur
Mot de passe: vous passez

Cette configuration a fonctionné pour moi, sans changer le code.

5

Les recherches de services d'annuaire/LDAP peuvent être utilisées à cette fin. Cela implique certains changements au niveau de l'infrastructure, mais la plupart des environnements de production ont une telle disposition

1
questzen