es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Iniciar sesión del usuario a través de GET (encabezado de autenticación básica) o POST

He estado investigando sobre los métodos y encabezados HTTP recientemente, ¿debemos usar GET con autorización básica en lugar de POST al enviar información?

Métodos HTTP

El método GET solicita una representación del recurso especificado. Las solicitudes que utilizan GET solo deben obtener datos.

El método POST envía una entidad al recurso especificado, lo que a menudo provoca un cambio de estado o efectos secundarios en el servidor.

Como podemos ver aquí, el método POST normalmente cambia el estado del servidor. Si enviamos JWT/cookies HTTP, no estamos modificando el estado del servidor y tampoco estamos creando un nuevo recurso en el servidor.

Entiendo que no debemos enviar el nombre de usuario y la contraseña como un parámetro GET, ¿pero deberíamos usar el encabezado de autorización en su lugar?

Autenticación básica
Para la autenticación “Basic”, las credenciales se construyen combinando primero el nombre de usuario y la contraseña con dos puntos (aladdin:opensesame), y luego codificando la cadena resultante en base64 (YWxhZGRpbjpvcGVuc2VzYW1l).
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

La única ventaja que veo al usar POST en lugar de GET es que no necesitamos código adicional en el HTML/JS del lado del cliente para enviar encabezados a través de la API fetch. Para enviar encabezados, necesitaríamos un evento onsubmit y luego verificar si el código de estado es 200. Si es 200, necesitaríamos redirigir a la página después de la pantalla de inicio de sesión. Por otro lado, al usar la API fetch, esto significa que el servidor no necesita enviar una nueva página HTML al cliente todo el tiempo.

¿Deberíamos usar GET con autenticación básica o POST al iniciar sesión, ya que no creamos un recurso/modificamos el estado del servidor?
¿Cambiaría esto si, por ejemplo, activamos la autenticación de dos factores, ya que necesitaríamos generar un código para ese usuario?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en autenticación, encabezados HTTP, autenticación básica y métodos HTTP, recomendaría utilizar el método POST para iniciar sesión, incluso si no estamos creando un nuevo recurso o modificando el estado del servidor.

    Si bien es cierto que enviar JWT/cookies HTTP no modifica inherentemente el estado del servidor, iniciar sesión implica autenticación y las credenciales de autenticación deben tratarse con cuidado. El uso del método POST proporciona una capa adicional de seguridad, ya que el nombre de usuario y la contraseña no son visibles en la URL o el encabezado.

    En cuanto a habilitar la autenticación de dos factores (2FA), seguiría siendo recomendable utilizar el método POST, ya que generar un código para el usuario aún se puede considerar un cambio de estado en el servidor. Además, el uso de POST permite una mayor flexibilidad en el futuro si el proceso de autenticación cambia, por ejemplo, si se agregan medidas de seguridad adicionales.

    Es importante tener en cuenta que seguiría siendo recomendable utilizar el encabezado de autorización con autenticación básica en lugar de enviar el nombre de usuario y la contraseña como parámetro GET, ya que proporciona un nivel de cifrado.

Comments are closed.