JsonWebToken en JavaScript (Node.js): guía completa con ejemplos

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

JsonWebToken en JavaScript (Node.js): guía completa con ejemplos

¿Qué es y para qué sirve?

La librería JsonWebToken (comúnmente usada como jsonwebtoken o jwt) es una de las más populares para trabajar con JSON Web Tokens (JWT) en el entorno Node.js. JWT es una forma compacta y autónoma de transmitir información entre partes como un objeto JSON. Esta información puede ser verificada y es confiable porque está firmada digitalmente. Los JWT pueden firmarse usando una clave secreta (algoritmo HMAC) o un par de claves pública/privada (algoritmos RSA o ECDSA).

El propósito principal de esta librería es implementar mecanismos de autorización y autenticación en aplicaciones web y APIs. Cuando un usuario inicia sesión correctamente, el servidor crea un JWT y lo envía al cliente. Luego, el cliente envía este token en cada solicitud posterior, permitiendo al servidor verificar la identidad del usuario sin necesidad de almacenar datos de sesión en el servidor. Esto hace que JWT sea la solución ideal para crear APIs RESTful, arquitecturas de microservicios y aplicaciones de una sola página (SPA).

La librería jsonwebtoken proporciona un conjunto completo de herramientas para crear (sign), verificar (verify) y decodificar (decode) tokens. Soporta todos los algoritmos de firma estándar, incluyendo HS256, RS256, ES256, y permite configurar de forma flexible el tiempo de vida del token, agregar campos personalizados (claims) y trabajar con claves públicas/privadas. Gracias a su fiabilidad y simplicidad, esta librería se utiliza en miles de proyectos en todo el mundo y es el estándar de facto para trabajar con JWT en el ecosistema Node.js.

Instalación

Para instalar la librería JsonWebToken en tu proyecto Node.js, ejecuta el siguiente comando en la terminal:

npm install jsonwebtoken

Si usas Yarn:

yarn add jsonwebtoken

Después de la instalación, puedes importar la librería en tu código:

const jwt = require('jsonwebtoken');
// o para módulos ES:
// import jwt from 'jsonwebtoken';

Inicio rápido — ejemplo mínimo funcional

Creemos un ejemplo sencillo que muestra cómo crear y verificar un token JWT:

const jwt = require('jsonwebtoken');

// Clave secreta (en un proyecto real, guárdala en .env)
const secretKey = 'mi-clave-super-secreta-123';

// Datos que queremos codificar en el token (payload)
const payload = {
  userId: 12345,
  username: 'juan_perez',
  role: 'user'
};

// 1. CREACIÓN DEL TOKEN
const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });
console.log('Token creado:', token);

// 2. VERIFICACIÓN DEL TOKEN
try {
  const decoded = jwt.verify(token, secretKey);
  console.log('Datos decodificados:', decoded);
  // Salida: { userId: 12345, username: 'juan_perez', role: 'user', iat: ..., exp: ... }
} catch (err) {
  console.error('Error al verificar el token:', err.message);
}

// 3. DECODIFICACIÓN SIN VERIFICAR LA FIRMA (NO RECOMENDADO para autorización)
const decodedWithoutVerify = jwt.decode(token);
console.log('Decodificado sin verificar:', decodedWithoutVerify);

Este ejemplo muestra las tres operaciones principales: crear un token con sign(), verificar su autenticidad con verify() y decodificar sin verificar la firma con decode().

Métodos/funciones principales

1. jwt.sign(payload, secretOrPrivateKey, [options, callback])

Firma: jwt.sign(payload: Object|Buffer, secretOrPrivateKey: string|Buffer, options?: Object, callback?: Function) => string|void

Qué hace: Crea (firma) un token JWT. Recibe un payload (datos), una clave secreta y opciones opcionales.

Recommendations