Tokens JWT en JavaScript (Node.js): Guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Tokens JWT en JavaScript (Node.js): Guía completa sobre la librería jsonwebtoken

JSON Web Token (JWT) es un estándar abierto (RFC 7519) para la creación de tokens de acceso basados en JSON. JWT se utiliza ampliamente para la autenticación y el intercambio de información entre el cliente y el servidor. En el ecosistema de Node.js, la librería más popular para trabajar con JWT es jsonwebtoken. En este artículo, analizaremos en detalle cómo instalar, configurar y utilizar esta librería para crear aplicaciones web seguras.



¿Qué es JWT y para qué sirve?

JWT es una cadena compuesta por tres partes separadas por puntos: Header (cabecera), Payload (carga útil) y Signature (firma). El token tiene este aspecto: xxxxx.yyyyy.zzzzz. Las principales ventajas de JWT son:

  • Seguridad — el token se firma con una clave secreta o un par de claves (RSA/ECDSA), lo que garantiza su integridad.
  • Autosuficiencia — toda la información necesaria para verificar la autenticidad está contenida en el propio token, lo que reduce el número de consultas a la base de datos.
  • Multiplataforma — JWT funciona con cualquier lenguaje de programación y plataforma.
  • Flexibilidad — puede agregar cualquier dato personalizado en el payload (por ejemplo, ID de usuario, rol).


Instalación de la librería jsonwebtoken

Para trabajar con JWT en Node.js, instale el paquete jsonwebtoken a través de npm:

npm install jsonwebtoken

Después de la instalación, importe la librería en su archivo:

const jwt = require('jsonwebtoken');


Generación (firma) de un token JWT

Para crear un token se utiliza el método jwt.sign(payload, secretOrPrivateKey, options). Veamos un ejemplo básico:

const jwt = require('jsonwebtoken');

const payload = { userId: 123, role: 'user'};

const secretKey = 'my_super_secret_key_123';

const token = jwt.sign(payload, secretKey, { expiresIn: '1h', // el token expirará en 1 hora algorithm: 'HS256' // algoritmo de firma (por defecto HS256)});

console.log('Token generado:', token);

Importante: Nunca almacene la clave secreta en el código. Utilice variables de entorno (archivo .env). Para ello, instale el paquete dotenv:

npm install dotenv

Ejemplo de uso con variables de entorno:

require('dotenv').config();const jwt = require('jsonwebtoken');

const token = jwt.sign( { userId: 456 }, process.env.JWT_SECRET, { expiresIn: '7d' });


Verificación de un token JWT

Para verificar la autenticidad del token se utiliza el método jwt.verify(token, secretOrPublicKey, options). Devuelve el payload si el token es válido, o lanza un error si el token ha expirado o no es válido.

const token = 'su_token_aqui';

try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('Datos decodificados:', decoded); // { userId: 456, iat: 1700000000, exp: 1700600000 }} catch (err) { if (err.name === 'TokenExpiredError') { console.log('El token ha expirado'); } else if (err.name === 'JsonWebTokenError') { console.log('Token no válido'); } else { console.log('Error de verificación:', err.message); }}

Tenga en cuenta los campos iat (issued at — momento de creación) y exp (expiration time — momento de expiración), que se agregan automáticamente si se especifica el parámetro expiresIn.



Middleware para Express.js

En aplicaciones reales, JWT generalmente se verifica en un middleware. Aquí hay un ejemplo para Express.js:

const express = require('express');const jwt = require('jsonwebtoken');require('dotenv').c                    

Recommendations