18.1 Trabajar con tokens web JSON (JWT) en NodeJS
Los tokens web JSON, o JWT, son una parte integral del desarrollo web moderno y proporcionan un método seguro y eficiente para la autenticación y autorización. Son especialmente útiles en API, donde la comunicación entre el cliente y el servidor debe ser rápida y segura. En este capítulo, exploraremos qué son los JWT, cómo funcionan y cómo podemos implementarlos en una API de NodeJS.
¿Qué son los tokens web JSON?
Los JWT son tokens de acceso que se utilizan para autenticar usuarios y pasar información entre partes. Están comprimidos en formato JSON, lo que los hace livianos y fáciles de transmitir. Cada JWT se compone de tres partes: el encabezado, la carga útil y la firma.
El encabezado normalmente contiene dos partes: el tipo de token, que es JWT, y el algoritmo de firma, como HMAC SHA256 o RSA. La carga útil, también conocida como "reclamaciones", son afirmaciones sobre una entidad (normalmente el usuario) y metadatos adicionales. La firma se utiliza para verificar que el remitente del JWT es quien dice ser y para garantizar que el mensaje no haya sido alterado en el camino.
¿Cómo funcionan los JWT?
Cuando un usuario se autentica exitosamente en una aplicación, el servidor crea un JWT y se lo devuelve al usuario. Este token generalmente se almacena localmente en el dispositivo del usuario y se envía junto con cada solicitud posterior al servidor. El servidor verifica la firma del token para garantizar que sea válido y luego usa la información de la carga útil para procesar la solicitud.
Uno de los principales beneficios de los JWT es que son autosuficientes. Esto significa que toda la información necesaria para autenticar al usuario está contenida en el token, lo que elimina la necesidad de realizar consultas adicionales a la base de datos para verificar la identidad del usuario. Esto puede resultar en un mejor rendimiento y escalabilidad.
Implementación de JWT en NodeJS
Para trabajar con JWT en NodeJS, necesitamos el paquete 'jsonwebtoken'. Este paquete proporciona una serie de funciones útiles para trabajar con JWT, incluidas funciones para crear, verificar y decodificar tokens.
Para crear un JWT, utilizamos la función 'firmar'. Esta función toma tres argumentos: la carga útil, una clave secreta utilizada para firmar el token y un objeto de opciones. El objeto de opciones puede incluir cosas como el algoritmo de firma a usar y la vida útil del token.
const jwt = require('jsonwebtoken'); carga útil constante = { nombre de usuario: 'JohnDoe', rol: 'administrador' }; const secreto = 's3cr3t'; opciones constantes = { caducaEn: '2h' }; token const = jwt.sign(carga útil, secreto, opciones);
Para verificar un JWT, utilizamos la función 'verificar'. Esta función toma tres argumentos: el token, la clave secreta utilizada para firmar el token y una función de devolución de llamada. La función de devolución de llamada se llama con el resultado de la verificación.
const jwt = require('jsonwebtoken'); token constante = '...'; // el token recibido const secreto = 's3cr3t'; jwt.verify(token, secreto, (err, decodificado) => { si (errar) { console.log('Token no válido'); } demás { console.log('Token válido', decodificado); } });
Es importante tener en cuenta que la clave secreta utilizada para firmar y verificar el token debe mantenerse segura. Si un atacante obtiene acceso a la clave secreta, puede crear sus propios tokens y obtener acceso no autorizado a la aplicación.
En resumen, los JWT proporcionan una forma segura y eficiente de manejar la autenticación y la autorización en las API. Son especialmente útiles en NodeJS, donde podemos aprovechar el paquete 'jsonwebtoken' para crear, verificar y decodificar tokens fácilmente. < /p>