Decodificador de JSON Web Token (JWT): Inspecciona el Contenido y las Reclamaciones de JWT

· 12 min de lectura

Tabla de Contenidos

Comprendiendo los JSON Web Tokens

Los JSON Web Tokens (JWT) son tokens compactos y autocontenidos utilizados para transmitir información de forma segura entre partes como un objeto JSON. Se han convertido en el estándar de facto para la autenticación y el intercambio de información en aplicaciones web modernas, aplicaciones móviles y arquitecturas de microservicios.

A diferencia de la autenticación tradicional basada en sesiones donde los datos del usuario se almacenan en el servidor, los JWT incorporan los datos directamente dentro del token mismo. Esta diferencia fundamental hace que los JWT sean ideales para operaciones sin estado: el servidor no necesita mantener almacenamiento de sesión ni consultar una base de datos para verificar la identidad del usuario en cada solicitud.

Piensa en un JWT como un pasaporte digital. Así como un pasaporte contiene tu información de identidad y está asegurado criptográficamente con hologramas y marcas de agua, un JWT contiene reclamaciones sobre un usuario y está firmado criptográficamente para prevenir manipulaciones. Cuando presentas tu pasaporte en el control fronterizo, los oficiales pueden verificar su autenticidad sin llamar a tu país de origen; de manera similar, los servicios pueden verificar JWT sin contactar al servidor emisor.

Consejo profesional: Los JWT son particularmente útiles en sistemas distribuidos y arquitecturas de microservicios donde mantener un estado de sesión centralizado crearía cuellos de botella. Cada servicio puede verificar tokens de forma independiente sin comunicación entre servicios.

Escenarios comunes donde los JWT brillan incluyen:

La Estructura de Tres Partes de los JWT

Cada JWT consiste en tres partes distintas separadas por puntos. Cada parte cumple un propósito específico en la funcionalidad y el modelo de seguridad del token. Cuando ves un JWT, se ve así:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Desglosemos cada componente:

Encabezado

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. Esta información le dice a la parte receptora cómo procesar y verificar el token.

Un encabezado decodificado se ve así:

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

Carga Útil

La carga útil contiene las reclamaciones: declaraciones sobre una entidad (típicamente el usuario) y metadatos adicionales. Las reclamaciones se categorizan en tres tipos:

Tipo de Reclamación Descripción Ejemplos
Reclamaciones Registradas Reclamaciones predefinidas recomendadas por la especificación JWT iss, exp, sub, aud
Reclamaciones Públicas Reclamaciones personalizadas definidas por quienes usan JWT, deben ser resistentes a colisiones name, email, role
Reclamaciones Privadas Reclamaciones personalizadas acordadas entre las partes department, permissions

Una carga útil típica podría verse así:

{
  "sub": "1234567890",
  "name": "John Doe",
  "email": "[email protected]",
  "role": "admin",
  "iat": 1516239022,
  "exp": 1516242622
}

Firma

La firma es el sello criptográfico que asegura que el token no ha sido manipulado. Se crea tomando el encabezado codificado, la carga útil codificada, una clave secreta y aplicando el algoritmo especificado en el encabezado.

Por ejemplo, si se usa HMAC SHA256, la firma se crea así:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

La firma permite al destinatario verificar que el remitente del JWT es quien dice ser y que el mensaje no fue cambiado en el camino.

¿Por Qué Usar un Decodificador de JSON Web Token?

Aunque los JWT están diseñados para ser legibles por máquinas, los desarrolladores frecuentemente necesitan inspeccionar su contenido durante el desarrollo, depuración y auditoría de seguridad. Un decodificador de JWT transforma las cadenas codificadas en Base64 en JSON legible por humanos, facilitando la comprensión de qué información contiene el token.

Aquí están las razones principales por las que los desarrolladores usan decodificadores de JWT:

Desarrollo y Depuración

Al construir sistemas de autenticación, necesitas verificar que tus tokens contengan las reclamaciones correctas y estén formateados adecuadamente. Un decodificador te permite inspeccionar rápidamente los tokens sin escribir código personalizado o usar herramientas de línea de comandos.

Por ejemplo, si los usuarios reportan problemas de autenticación, puedes decodificar su JWT para verificar si la reclamación exp (expiración) ha pasado o si faltan reclamaciones requeridas.

Auditoría de Seguridad

Los equipos de seguridad usan decodificadores de JWT para analizar tokens en busca de vulnerabilidades potenciales. Pueden verificar:

Pruebas de Integración

Al integrarse con API de terceros que usan autenticación JWT, decodificar tokens te ayuda a entender el formato esperado y la estructura de reclamaciones. Esto es especialmente útil cuando la documentación está incompleta o desactualizada.

Aprendizaje y Educación

Para desarrolladores nuevos en JWT, un decodificador proporciona retroalimentación visual inmediata sobre cómo funciona la estructura de tres partes y cómo los cambios en la carga útil afectan el token final.

Consejo rápido: Nunca pegues JWT de producción que contengan datos reales de usuarios en decodificadores en línea. Usa nuestra herramienta Decodificador de JWT que procesa tokens completamente en tu navegador sin enviar datos a ningún servidor.

Proceso de Decodificación Paso a Paso

Decodificar un JWT es sencillo una vez que entiendes el proceso. Así es como funciona internamente:

Paso 1: Dividir el Token

Primero, divide la cadena JWT en los caracteres de punto para separar las tres partes:

const parts = token.split('.');
const header = parts[0];
const payload = parts[1];
const signature = parts[2];

Paso 2: Decodificar Base64

Cada parte está codificada en Base64URL (una variante segura para URL de Base64). Decodifica el encabezado y la carga útil para obtener las cadenas JSON:

const decodedHeader = atob(header);
const decodedPayload = atob(payload);

Paso 3: Analizar JSON

Analiza las cadenas decodificadas como objetos JSON:

const headerObj = JSON.parse(decodedHeader);
const payloadObj = JSON.parse(decodedPayload);

Paso 4: Inspeccionar el Contenido

Ahora puedes examinar las reclamaciones y metadatos. Verifica las reclamaciones estándar como:

Usando nuestro Decodificador de JWT, todo este proceso ocurre instantáneamente en tu navegador. Simplemente pega tu token y ve el encabezado y la carga útil decodificados inmediatamente.

Validando la Firma del Token

Decodificar un JWT es solo la mitad de la historia: la validación es donde ocurre la seguridad. Cualquiera puede decodificar un JWT ya que es solo JSON codificado en Base64, pero solo las partes con el secreto correcto o la clave pública pueden verificar la firma.

Por Qué Importa la Validación de Firma

La firma asegura dos propiedades de seguridad críticas:

  1. Integridad: El token no ha sido modificado desde que fue firmado
  2. Autenticidad: El token fue creado por una parte confiable que posee la clave secreta

Sin validación de firma, un atacante podría decodificar un JWT, cambiar la carga útil (quizás elevando sus privilegios de "usuario" a "admin"), recodificarlo y usar el token modificado. La firma previene este ataque.

Proceso de Validación

Para validar una firma JWT, necesitas:

El proceso de validación recrea la firma usando el encabezado y la carga útil del token, luego la compara con la firma incluida en el token. Si coinciden, el token es válido.

Consejo profesional: Siempre valida los JWT en el lado del servidor, nunca confíes solo en la validación del lado del cliente. Los atacantes pueden eludir las verificaciones del lado del cliente, pero no pueden falsificar una firma válida sin la clave secreta.

Algoritmos de Firma Comunes

Algoritmo Tipo Tipo de Clave Caso de Uso
HS256 HMAC con SHA-256 Simétrica (secreto compartido) Aplicaciones simples, la misma parte crea y verifica
RS256 RSA con SHA-256 Asimétrica (par de claves pública/privada) Sistemas distribuidos, múltiples verificadores
ES256

📚 You May Also Like