JSON Web Tokens (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de pasar información entre partes como un objeto JSON. Esta información se puede verificar y confiar porque está firmada digitalmente. Los JWT se pueden firmar usando un secreto (con el algoritmo HMAC) o un par de claves pública/privada usando RSA o ECDSA.
Al crear API en NodeJS, JWT desempeña un papel crucial en la autenticación y autorización. Permite a los usuarios autenticarse y, una vez autenticados, reciben un JWT. Este token se utiliza luego para autorizar al usuario a acceder a rutas, servicios y recursos permitidos con este token. Esto convierte a JWT en una herramienta indispensable para crear API seguras.
Implementar JWT en NodeJS es bastante sencillo, gracias a paquetes como jsonwebtoken. Para comenzar, necesita instalar el paquete jsonwebtoken usando npm.
npm instala jsonwebtoken
Una vez instalado, puede importar el paquete a su archivo y comenzar a usarlo para crear y verificar tokens.
const jwt = require('jsonwebtoken');
Para crear un token, utiliza el método sign(). Este método acepta tres argumentos: la carga útil, el secreto y las opciones. La carga útil es el objeto que contiene las reclamaciones. Los reclamos son declaraciones sobre una entidad (generalmente el usuario) e información adicional. El secreto es la clave secreta que se utiliza para firmar el token. Las opciones se utilizan para establecer otras propiedades del token, como el algoritmo de firma y la caducidad del token.
let carga útil = {nombre de usuario: 'usuario'}; let secreto = 'alguna clave secreta'; let token = jwt.sign(carga útil, secreto, {expiresIn: '1h'});
Para verificar un token, utiliza el método verificar(). Este método acepta tres argumentos: el token, el secreto 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.
jwt.verify(token, secreto, función(err, decodificado) { si (errar) { console.log('Error en la verificación del token'); } demás { console.log('Token verificado exitosamente'); } });
Una cosa importante a tener en cuenta es que siempre debes proteger el secreto utilizado para firmar el token. Si alguien tiene acceso a su secreto, puede firmar tokens él mismo, lo que puede provocar graves problemas de seguridad.
Además, siempre debe verificar el token antes de permitir que el usuario acceda a rutas, servicios o recursos protegidos. Esto se puede hacer utilizando middleware que verifique el token en cada solicitud.
función authenticateToken(solicitud, res, siguiente) { token const = req.headers['autorización']; si (token == nulo) devuelve res.sendStatus(401); jwt.verify(token, secreto, (err, usuario) => { si (err) devuelve res.sendStatus(403); req.usuario = usuario; próximo(); }); }
En resumen, JWT es una poderosa herramienta para la autenticación y autorización en las API de NodeJS. Le permite crear tokens que pueden usarse para autenticar usuarios y autorizarlos a acceder a rutas, servicios y recursos. Implementar JWT en NodeJS es sencillo gracias a paquetes como jsonwebtoken.