2008-10-09 21 views
56

Necesito configurar un sitio web para acceder a un servicio web en otra máquina, a través de un proxy. Puedo configurar el sitio web para usar un proxy, pero no puedo encontrar una manera de especificar las credenciales que requiere el proxy, ¿es posible? Aquí está mi configuración actual:¿Es posible especificar credenciales de proxy en su web.config?

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

Sé que usted puede hacer esto a través de código, pero el software de la página web se está ejecutando es un CMS de código cerrado por lo que no puede hacer esto.

¿Hay alguna manera de hacer esto? MSDN no me está ayudando mucho.

Respuesta

92

Sí, es posible especificar sus propias credenciales sin modificar el código actual. Sin embargo, requiere una pequeña porción de código de su parte.

Crear una asamblea llamada SomeAssembly.dll con esta clase:

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; 
     } 
    } 
} 

añadir esto a su archivo de configuración:

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

Este "inyecta" un nuevo proxy de la lista, y Debido a que no hay credenciales predeterminadas, la clase WebRequest llamará primero a su código y solicitará sus propias credenciales. Deberá colocar el ensamblado SomeAssembly en el directorio bin de su aplicación CMS.

Este es un código de alguna manera estático, y para obtener todas las cadenas como el usuario, contraseña y URL, puede necesitar implementar su propio ConfigurationSection, o agregar información en el AppSettings, que es mucho más fácil.

+0

Voy a marcar esto como la respuesta, porque parece que * debería * funcionar, pero sigo teniendo problemas de conexión que parecen estar abajo al servidor ISA más que nada ... – spmason

+0

Esto es realmente genial. – Lalit

+0

¡Solución maravillosa! ¡Qué salvavidas! gracias @ Jerome-Laban! – mateuscb

1

Las funciones de servicios de directorio/LDAP se pueden utilizar para cumplir este propósito. Implica algunos cambios a nivel de infraestructura, pero la mayoría de los entornos de producción tienen dicha disposición

+0

No tengo idea de cómo podría ayudar esto. Los servidores no están en el mismo dominio si eso importa ... – spmason

14

Aunque no he encontrado una buena manera de especificar las credenciales de red proxy en el web.config, puede encontrarse con que todavía se puede utilizar una solución no codificante, incluyendo esto en su web.config:

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

El ingrediente clave para poner esto en marcha, es cambiar la configuración de IIS, asegurando que la cuenta que ejecuta el proceso tenga acceso al servidor proxy. Si su proceso se está ejecutando bajo LocalService o NetworkService, probablemente esto no funcionará. Lo más probable es que quieras una cuenta de dominio.

2

Puede especificar las credenciales mediante la adición de un nuevo genérico de credenciales de su servidor proxy en Windows Administrador de Credenciales:

1 En Web.config

<system.net>  
<defaultProxy enabled="true" useDefaultCredentials="true">  
<proxy usesystemdefault="True" />  
</defaultProxy>  
</system.net> 
  1. En Credencial Gestor >> Añadir una Credencial Genérico

Internet o dirección de red: su dirección proxy
nombre usuario: su nombre de usuario
Contraseña: pasa

Esta configuración funcionó para mí, sin cambiar el código.

+0

¿Cuál es el administrador de credenciales? No se puede encontrar en Windows 10 ... – leinad13

+0

Panel de control \ Todos los elementos del panel de control \ Credential Manager – jerone

Cuestiones relacionadas