2009-06-03 21 views
5

Estoy tratando de usar HttpWebRequest para obtener un URI https que requiere un nombre de usuario y contraseña. Si coloco el URI en un navegador, aparece un cuadro de diálogo que solicita credenciales y luego funciona. El uso de HttpWebRequest me da un error 401 no autorizado.HttpWebRequest sobre SSL con las credenciales del cliente

La documentación de NetworkCredentials dice que no admite SSL, pero no puedo encontrar lo que se supone que debo usar.

Respuesta

5

¿El servidor utiliza la autenticación básica de HTTP o algún otro tipo? Si usa HTTP básico, puede configurar la propiedad Credentials en la solicitud web en una credencial que contenga el nombre de usuario y la contraseña correctos, y establecer la propiedad PreAuthenticate en verdadero.

He aquí un ejemplo (que es no probado, a fin de utilizarlo como una guía general):

var uri = new Uri("https://somesite.com/something"); 
var request = WebRequest.Create(uri) as HttpWebRequest; 
request.Credentials = new NetworkCredential("myUserName","myPassword"); 
request.PreAuthenticate = true; 

var response = request.GetResponse(); 

Nota: En mi experiencia haciendo esto, hay un cierto comportamiento extraño en el marco .NET. Uno pensaría que debería hacer lo que dice el código, pero lo que realmente hace esto: solicitud

  • Enviar al servidor con las credenciales
  • servidor responde con 401
  • volver a enviar la solicitud con las credenciales que le dio es
  • El servidor acepta solicitud.

No tengo idea de por qué haría esto, ya que parece estar roto, por lo que tal vez fue una peculiaridad de mi máquina y tal vez no te pase a ti.

Si su aplicación no es sensible al rendimiento, y sus solicitudes no son POSTS de datos grandes, probablemente no lo note, pero para evitarlo, tuve que crear manualmente el encabezado de autenticación HTTP básico y configurarlo HttpWebRequest manualmente manipulando la colección Headers.

+0

Creo que el comportamiento que describes es el mismo comportamiento que wget en * nix muestra. Se intenta una vez y falla y luego envía las credenciales y tiene éxito. – Stephan

+0

Creo que este es un tipo de secuencia de solicitud de desafío que forma parte de la especificación http. – MGOwen

Cuestiones relacionadas