¿Por qué el cliente HTTP solo enviaría encabezados de autenticación una vez que se rechazó una solicitud no autenticada?

9

El uso predeterminado de las clases HttpClient y HttpWebRequest .NET está configurando la propiedad Credentials y luego le pide a la instancia de la clase que realice una solicitud HTTP. Si el objetivo requiere una autorización Básica , ocurre lo siguiente (esas clases lo hacen bajo el capó y Fiddler muestra lo que está pasando):

  • la primera solicitud se envía sin el encabezado Autorización
  • el servidor declina y responde con HTTP 401
  • el cliente vuelve a enviar la misma solicitud esta vez con el encabezado Autorización que contiene los datos correctamente codificados de la propiedad Credentials

y este es el comportamiento predeterminado. Entonces, a menos que el usuario valide su aplicación y tome medidas adicionales, cada solicitud se envía dos veces, la primera se rechaza universalmente.

Mi pregunta es: ¿cuál es la razón de tal comportamiento predeterminado? La clase cliente tiene su propiedad Credentials establecida, por lo que asume que el usuario quiere usar esas credenciales para la autenticación. ¿Por qué no enviar el encabezado apropiado con la primera solicitud? ¿Hacer esto último comprometería de alguna manera al cliente?

    
pregunta sharptooth 10.09.2014 - 09:53
fuente

1 respuesta

21

Este comportamiento se especifica mediante RFC2617 . La razón para el viaje de ida y vuelta adicional es que el servidor puede solicitar diferentes tipos de autenticación: básica, resumen, etc. Si sabe de antemano que el servidor toma la autenticación básica, entonces, como dice, puede guardar un viaje de ida y vuelta. Pero ese no es el valor predeterminado, y creo que las bibliotecas .NET tienen razón para exponer esto como lo hacen.

    
respondido por el paj28 10.09.2014 - 10:11
fuente

Lea otras preguntas en las etiquetas