/ / .Net solicitud web a través de un proxy, detecta automáticamente las credenciales: .net, vb.net, servicios web, proxy, fiddler

La solicitud web de .Net a través de un proxy, detecta automáticamente las credenciales - .net, vb.net, servicios web, proxy, fiddler

He pasado algún tiempo buscando artículos eneste sitio para encontrar exactamente lo que estoy tratando de lograr, pero hasta ahora no tuve suerte. Estoy realizando una solicitud web en mi aplicación del lado del cliente, y quiero asegurarme de que funcione a través de un proxy. Configuré Fiddler2 para que actúe como el servidor proxy para las pruebas, y lo estoy obligando a requerir autenticación.

Básicamente, descubrí cómo usar el proxy:

    Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy()
webService.Proxy = proxy

También he tratado de obtener las credenciales adecuadas para el proxy por

    webService.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials

y también agregando esto a app.config en la sección de configuración:

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

En ambos casos obtengo la misma excepción web:

    The request failed with HTTP status 407: Proxy Auth Required.

El proxy de Fiddler2 tiene un nombre de usuario de 1 y uncontraseña de 1, y si le doy estas credenciales a la solicitud mediante programación, la solicitud se autenticará correctamente. Sin embargo, ¿hay alguna razón por la que no está obteniendo las credenciales de IE al igual que está tomando la información del proxy?

¿Es el proxy de Fiddler una excepción a cómo funciona esto?¿también? ¿Un proxy normal que use la autenticación de Windows estaría bien con las formas en que intenté obtener las credenciales, y hay alguna forma de que pueda probarlo fácilmente?

Respuestas

2 para la respuesta № 1

Más, pero no todas los proxies que requieren autenticación usan el credenciales de inicio de sesión de Windows del usuario actual. Como consecuencia, el uso de DefaultCredentials suele ser lo correcto.

Habiendo dicho eso, es posible para que un proxy exija credenciales personalizadas (Fiddler quiere "1: 1", por ejemplo) y cuando eso sucede, no hay forma de que su código sepa realmente cuáles son esas credenciales. mayo tenga suerte pidiéndole a CredMan que vea si hay uncredencial almacenada para el reino proxy de destino, pero esto a menudo no funcionará (suponiendo que alguna vez lo haga). No puede "generalmente" pedirle a IE "las credenciales porque, como regla general, no" continuamente almacenar las credenciales; en su lugar, se los solicita al usuario en la primera solicitud de la sesión y los mantiene en memoria durante toda la vida de esa sesión.

Si espera que su software se ejecute en unentorno con dicho proxy, debe atrapar la respuesta HTTP / 407 y solicitar al usuario sus credenciales de proxy, que puede agregar manualmente a la solicitud cuando vuelva a intentarlo.

Mira mi IEInternals publicación de blog para la discusión de este tema.