JSON Web Tokens (JWT)

Imagina que estás en un evento y debes mostrar tu identificación para ingresar. Este proceso de verificación es similar a cómo funcionan los tokens en la web: son credenciales digitales que autentican tu identidad y autorizan el acceso a recursos protegidos.

Un token es una firma digital única, como una contraseña o una clave. En el mundo de las APIs y aplicaciones modernas, los JSON Web Tokens (JWT) se han convertido en el estándar para manejar la autenticación y el intercambio seguro de información.

Token

¿Qué es un JWT?

Un JWT (JSON Web Token) es un estándar definido por RFC 7519 que permite transmitir datos entre aplicaciones de forma compacta y segura. Está compuesto por un objeto JSON codificado en Base64 y firmado digitalmente, lo que garantiza su integridad.
Características clave:

  • Compacto: Fácil de transmitir en URLs o encabezados HTTP.
  • Autocontenido: Incluye toda la información necesaria (como identidad del usuario) sin necesidad de consultar una base de datos.
  • Firmado: Puede verificarse su autenticidad usando claves públicas/privadas.

Estructura de un JWT

Un JWT se divide en tres partes, separadas por puntos:

  1. Header (Encabezado)
    Contiene el algoritmo de firma (ej: HS256) y el tipo de token (JWT).
    JavaScript
                      
                        {
                          "alg": "HS256",
                          "typ": "JWT"
                        }
                      
                    
  2. Payload (Carga útil)
    Almacena los datos del usuario (como email o id) y metadatos (fecha de expiración).
    JavaScript
                      
                        {
                          "email": "usuario@example.com",
                          "exp": 1683241117
                        }
                      
                    
  3. Signature (Firma)
    Combina el header, payload y una clave secreta para validar la autenticidad del token.
    JavaScript
                      
                        eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InVzdWFyaW9AZXhhbXBsZS5jb20ifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
                      
                    

Cómo Crear y Verificar un JWT

Creación (en Node.js con la librería jsonwebtoken):

JavaScript
              
                const jwt = require('jsonwebtoken');
                const token = jwt.sign(
                  { email: "usuario@example.com" }, 
                  "clave-secreta", 
                  { expiresIn: "1h" }
                );
                console.log(token);
              
            

Verificación:

JavaScript
                
                  const decoded = jwt.verify(token, "clave-secreta");
                  console.log(decoded.email); // Muestra el email del usuario