Archivo de octubre de 2017

Gestión del proceso de login con tokens

martes 10 de octubre de 2017

El uso de tokens en API REST es un método que proporciona mucha facilidad a la hora de controlar los accesos a diferentes rutas del servidor.

De manera resumida de procedimiento consiste en:

  1. el usuario envía sus credenciales al servidor (usuario/contraseña).
  2. el servidor comprueba la autenticidad y generar un token. La generación es un proceso más o menos complejo que escapa al objeto de este post, pero para el que tenga curiosidad puede seguirlo aquí.
  3. el token generado es enviado al cliente.
  4. en la siguientes peticiones, el cliente envía el token que le identifica y, en el caso de que sea correcto, el servidor manda los datos que se le solicitan.

En principio la forma de enlazar todos estos pasos no requiere de demasiada explicación (si no tenemos en cuenta el proceso de generación y verificación del token), pero se complica en el momento en el que queremos que validación correcta de credenciales redirija a otra página (por ejemplo el tablero de configuración del usuario).

¿Qué problemas aparecen?

La primera opción que se nos plantea es la de utilizar AJAX para enviar las credenciales, redireccionar a la página que nos interese y recibir el token. Desgraciadamente, si la petición es vía AJAX el cliente espera recibir contenido o información para cargar en la misma página (no ambas cosas)  y por lo tanto la redirección no funciona.

Otra opción sería no redireccionar sino enviar el documento html y, vía jQuery, cargar el documento utilizando la función $(«html») .html. En este caso el problema radica en que se produce fallos en la carga con jQuery y que además no pasamos el token.

Un cambio de enfoque es más funcional aunque produce más acoplamiento y, desde mi punto de vista, es menos elegante: enviar vía AJAX las credenciales, recibir el token y desde el propio cliente redireccionar a la URL que nos interesa. Este sistema necesita que el cliente sepa de la necesidad de cambiar de URL, es decir, requiere tener conocimientos de lo que quiere hacer el servidor.

Al final la opción que más me convence es la de enviar vía POST de manera síncrona (mediante un formulario) los datos de las credenciales y contestar con la página que deseamos que se muestre, pasando en el HEADER de la respuesta (ya sea mediante un campo oculto o mediante una cookie) el token que necesita el cliente.

+Info: Autenticación de aplicaciones con tokens
+Info: ¿qué es la autenticación basada en tokens?