Escritos

JWT no está cifrado, es solo Base64

¿Quién puede ver lo que hay dentro del token JWT que se envía en cada solicitud de tu app? Respuesta: cualquiera. Qué guardan realmente los tokens, por qué basta con verificar la firma y 4 cosas que nunca debes poner en el payload.

Furkan Özay15 de septiembre de 2026 · 2 min de lectura
czCZAY.DEV // EDITORIALES
SECURITY & AUTH

#API · 2 MIN DE LECTURA

FURKAN ÖZAYVOL. 2026 // #2AD8

Este es el token que se envía en cada solicitud de tu app. ¿Quién crees que puede leer lo que hay escrito dentro? La respuesta es sencilla: cualquiera.

Tres partes

Todo JWT se divide en tres partes separadas por puntos: header.payload.signature. Las dos primeras no están cifradas, solo codificadas en Base64. Base64 no es cifrado, es solo un formato de codificación: se puede decodificar en cualquier momento.

JavaScript
const [header, payload] = token.split(".");
console.log(JSON.parse(atob(payload)));
// { sub: "user_123", email: "...", role: "admin", exp: 1735689600 }

Si pegas esto en la consola de tu navegador, tu correo electrónico, tu ID de usuario, tu rol y la fecha de expiración aparecen justo delante de ti. Por eso nunca debes poner contraseñas, números de documento de identidad ni datos de tarjetas en el payload de un JWT.

¿Puedo editarlo y convertirme en admin?

Podrías editar el payload y escribir role: "admin", al fin y al cabo Base64 es una codificación bidireccional. Pero el servidor recalcula la firma con una clave secreta que solo él conoce. La firma no coincidirá con tu payload falsificado y el servidor rechazará el token: 401. Puedes leer el payload, pero no puedes manipularlo sin que se note.

Cuatro reglas

Importante: Trabajar con JWT

  1. No pongas datos sensibles en el payload: trátalo como público.
  2. Vuelve a verificar siempre la autorización (role, permissions) en el servidor; no confíes ciegamente en el token.
  3. Mantén tiempos de expiración cortos y usa refresh tokens para sesiones largas.
  4. Lee el secreto de firma (secret) desde .env, no lo escribas directamente en el código y nunca lo registres en ningún log.

Para terminar

El trabajo de JWT no es la confidencialidad, sino la integridad: garantiza que el contenido no ha sido alterado, no que esté oculto. Si tienes datos que realmente deben permanecer secretos, usa JWE (JWT cifrado) o las sesiones tradicionales del lado del servidor.

Hoja de ruta y herramienta interactivas

Sigue leyendo