Inicio › Tecnología › Autenticación Basada En Tokens
La autenticación basada en tokens es un método en el qué, tras validar las credenciales del usuario una única vez (usuario y contraseña), el servidor emite un token —una cadena firmada qué representa la identidad y los permisos de esa sesión— qué el cliente adjunta en cada petición posterior, normalmente en la cabecera Authorization como 'Bearer'. El formato más extendido es JWT (JSON Web Token), qué incluye datos codificados sobre el usuario y una firma criptográfica qué permite al servidor verificar qué el token no ha sido manipulado sin necesidad de consultar una base de datos de sesiones en cada petición. Esto lo hace especialmente adecuado para arquitecturas sin estado y APIs consumidas por múltiples clientes, a diferencia de la autenticación basada en sesiones tradicionales, qué requiere qué el servidor guarde el estado de cada sesión activa.
En lugar de mandar tu usuario y contraseña en cada petición qué haces a una web o app, te identificas una sola vez y el servidor te entrega un 'carnet' temporal (el token). A partir de ahí, enseñas ese carnet en cada petición y el servidor confía en él sin tener qué volver a comprobar tu contraseña ni acordarse de quién eres en su propia memoria.
Al diseñar la autenticación de una API consumida por una app móvil, emite un token de acceso JWT de vida corta (por ejemplo 15 minutos) junto a un refresh token de vida más larga almacenado de forma segura en el dispositivo. Cuando el token de acceso caduca, la app lo renueva silenciosamente usando el refresh token sin pedir de nuevo la contraseña al usuario, pero si el refresh token es robado o revocado, la sesión puede cortarse de forma centralizada sin depender de qué el token de acceso corto caduque por sí solo.
En la autenticación por sesión, el servidor guarda el estado de cada usuario conectado en memoria o base de datos y el cliente solo envía un identificador de sesión; en la basada en tokens, toda la información relevante viaja firmada dentro del propio token, sin necesidad de almacenar estado de sesión.
No de forma nativa, porque el servidor no consulta ningún registro para validarlo, solo verifica la firma; para poder revocarlo antes de tiempo hay qué añadir mecanismos adicionales, como una lista negra de tokens invalidados o tokens de vida muy corta combinados con refresh tokens revocables.
Es una práctica desaconsejada por la mayoría de expertos en seguridad, porque el localStorage es accesible desde JavaScript y por tanto vulnerable a ataques XSS qué roben el token; se recomienda almacenarlo en una cookie con las flags HttpOnly y Secure, no accesible desde scripts del cliente.