Inicio > Desarrollo Web > ¿Qué es JWT en la web y como usarlo?

¿Qué es JWT en la web y como usarlo?

Diego Cortés
Diego Cortés
October 1, 2024
¿Qué es JWT en la web y como usarlo?

JSON Web Token (JWT) es un estándar abierto (RFC 7519) que permite la transmisión segura de información entre diferentes partes como un objeto JSON. Esta información se puede verificar y confiar en su autenticidad, ya que está firmada digitalmente. En este artículo, exploraremos qué es JWT, cómo funciona y cómo implementarlo en aplicaciones web.

¿Qué es JWT?

Definición de JWT

JWT es un método de representación de información en un formato seguro y compacto que puede ser transmitido a través de URLs, POST O AJAX. Es comúnmente utilizado para la autenticación y autorización de usuarios en aplicaciones web.

Componentes de un JWT

Un JWT consta de tres partes:

  1. Header (Encabezado)
  2. Payload (Carga útil)
  3. Signature (Firma)

Header

El encabezado típicamente consiste en dos partes: el tipo de token, que es JWT, y el algoritmo de firma que se está utilizando, como HMAC SHA256 o RSA.

Ejemplo de un Header en formato JSON:

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

La carga útil contiene las afirmaciones (claims) sobre un usuario y otros datos. Las afirmaciones pueden ser registradas, públicas o privadas.

Ejemplo de un Payload:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Signature

Para crear la firma, se toma el encabezado codificado en Base64Url y el payload codificado en Base64Url, y se combina con una clave secreta usando el algoritmo especificado en el encabezado.

Ejemplo de la firma:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret)

¿Cómo funciona JWT?

JWT funciona en un flujo sencillo:

  1. Autenticación: Cuando un usuario inicia sesión, el servidor genera un JWT y lo envía al cliente.
  2. Almacenamiento: El cliente almacena el token (generalmente en localStorage o cookies).
  3. Acceso a recursos protegidos: El cliente envía el JWT en el header de autorización en solicitudes posteriores.
  4. Validación: El servidor valida el token y permite el acceso a recursos protegidos.

Ejemplo de flujo de autenticación con JWT

  1. El usuario envía sus credenciales (nombre de usuario y contraseña) al servidor.
  2. El servidor valida las credenciales y, si son correctas, genera un JWT.
  3. El servidor envía el JWT al cliente.
  4. El cliente almacena el JWT y lo incluye en las solicitudes subsecuentes.
  5. El servidor verifica el JWT y permite el acceso a los recursos seguros.

Ventajas de usar JWT

  1. Compacto: Debido a su tamaño reducido, JWT es ideal para ser enviado a través de encabezados HTTP.
  2. Autoconclusivo: Contiene toda la información necesaria sobre el usuario, lo que reduce la necesidad de consultar la base de datos.
  3. Seguridad: Los tokens pueden ser firmados y cifrados, lo que brinda un mayor nivel de seguridad.

Desventajas de utilizar JWT

  1. Tamaño del token: Aunque es compacto, el tamaño de un JWT puede incrementarse si se añaden muchas afirmaciones.
  2. Revocación compleja: Dado que los tokens son autoconclusivos, revocar un token antes de su expiración puede ser complicado.
  3. Sin estado: Aunque los JWT pueden ser usados para almacenar información de sesión, esto puede ser un problema si se necesita información constante o cada sesión debe ser cambiada.

Cómo usar JWT en aplicaciones web

Paso 1: Instalación de dependencias

Si estás utilizando Node.js, es probable que desees utilizar el paquete jsonwebtoken. Puedes instalarlo usando npm:

npm install jsonwebtoken

Paso 2: Crear un token

Cuando un usuario inicia sesión exitosamente, puedes generar un JWT:

const jwt = require('jsonwebtoken');

const user = {
  id: 1,
  name: 'John Doe'
};

// Firmar el token
const token = jwt.sign(user, 'secretkey', { expiresIn: '1h' });
console.log(token);

Paso 3: Verificar el token

Cada vez que recibas un token del cliente, es importante verificarlo para asegurarte de que sea válido:

jwt.verify(token, 'secretkey', (err, decoded) => {
  if (err) {
    return res.sendStatus(403); // Forbidden
  }
  console.log(decoded); // Información del usuario decodificada
});

Paso 4: Configurar middleware

Puedes crear un middleware para autenticar utilizando JWT en tu servidor:

function authenticateToken(req, res, next) {
  const token = req.header('Authorization').split(' ')[1];

  if (!token) return res.sendStatus(401);

  jwt.verify(token, 'secretkey', (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

Conclusión

JWT es una herramienta poderosa para la autenticación y autorización en aplicaciones web. Al permitir la transmisión segura de información, JWT se ha convertido en un estándar preferido en muchas aplicaciones modernas. Aunque tiene sus ventajas y desventajas, entender cómo implementarlo correctamente puede mejorar significativamente la seguridad y eficiencia de tu aplicación web.

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categorías

Page loaded in 29.94 ms