Autenticación de usuario en la aplicación JavaScript

4

Estoy desarrollando una aplicación web que se comunicará con un servidor a través de WebAPI. El lado del servidor estará en Azure y el lado del cliente en un alojamiento personalizado con una aplicación JavaScript (por ejemplo, con ReactJS).

Quiero autenticar al usuario de esta manera:

  1. El usuario ingresa el inicio de sesión y pasa la aplicación cliente.
  2. El paso y el inicio de sesión se envían al servidor a través de HTTPS con AJAX.
  3. Si la autenticación se realiza correctamente, el servidor devuelve un token al cliente.
  4. El token se almacena en el almacenamiento local.
  5. Todas las solicitudes futuras al servidor contendrán el token previamente almacenado como parámetro.

¿Es ese modelo de autenticación lo suficientemente seguro? Siempre usamos .NET MVC por ahora y almacenamos la información del usuario en la sesión del servidor, pero esta es una situación nueva, donde el cliente no se ejecutó directamente en el servidor, sino que solo se comunicó con él a través de HTTPS.

    
pregunta Denis Stephanov 05.05.2017 - 10:32
fuente

1 respuesta

1

Lo que describe aquí es prácticamente equivalente a la administración de cookies clásica (además del problema de parámetros, vea más abajo)

Cuando se realiza en aplicaciones SPA como la suya, generalmente el ID de sesión (el token que describe) forma parte de un encabezado HTTP.

Le recomiendo encarecidamente que evite enviar el ID de sesión como un parámetro como lo describe actualmente. Notablemente, porque:

  • el historial de navegación (del lado del cliente) revelaría el ID de la sesión y facilitaría el secuestro de la sesión
  • los registros del servidor contendrían los ID de sesión y facilitarían el secuestro de sesión

En su lugar, el uso de encabezados HTTP mitiga esos problemas.

  

Siempre usamos .NET MVC por ahora y almacenamos la información del usuario en la sesión del servidor, pero esta es una situación nueva, donde el cliente no se ejecutó directamente en el servidor,

Acerca de esto: asegúrese de que toda su validación siempre suceda al menos en el lado del servidor (y opcionalmente en el lado del cliente), y que la información confidencial de la sesión también se mantenga en el lado del servidor.

    
respondido por el niilzon 05.05.2017 - 11:49
fuente

Lea otras preguntas en las etiquetas