¿Qué tipo de mecanismo de autenticación protege el servicio web? Las credenciales establecidas en HttpWebRequest
solo se pasarán a través del encabezado HTTP Authorization
a través de Basic, Digest o NTLM. Por lo tanto, si su servicio web está protegido con WS-Security
, el NetworkCredentials
probablemente no se pasará al esquema de autenticación, porque WS-Security
no funciona en el nivel HTTP.
Lo que debe hacer es crear un proxy de cliente del servicio web para el servicio web a través de la herramienta de línea de comandos wsdl.exe
o algo similar. Eso le dará acceso a esquemas de autenticación con conocimiento del Servicio Web.
Update después de comentarios:
Parece como HttpWebRequest
necesidades para recibir el desafío con una WWW-Authenticate
401 Unauthorized
antes de que pueda autenticar correctamente a través de SSL. Supongo que hay dos rutas de código separadas en HttpWebRequests
que manejan el tráfico HTTP regular y el tráfico HTTPS cifrado. De todos modos, lo que se debe tratar, es:
- Ejecutar un
HttpWebRequest
no autenticado a la https://.../
URI.
- Recibe la respuesta
401 Unauthorized
.
- Ejecute la misma solicitud, ahora con ambos
Credentials
conjunto (no estoy seguro si PreAuthenticate
debe ser o false
; pruebe ambos).
- Ahora debería obtener
200 OK
o lo que sea que su servicio web responda.
Otra opción es construir la cabecera Authorization
a sí mismo en la solicitud inicial:
string credentials = String.Format("{0}:{1}", username, password);
byte[] bytes = Encoding.ASCII.GetBytes(credentials);
string base64 = Convert.ToBase64String(bytes);
string authorization = String.Concat("Basic ", base64);
request.Headers.Add("Authorization", authorization);
Esto funcionó para yo, gracias –