0Pricing
Cryptology Academy · Lección

Anatomía de un JWT: encabezado, payload y firma

Descifre las partes en base64url y comprenda cada campo del JWT.

Anatomía de un JWT: encabezado, payload y firma es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué es un JWT?

Un JSON Web Token (JWT) es un formato compacto de tokens seguro para URL, definido en RFC 7519. Codifica claims (afirmaciones sobre un sujeto) y una firma criptográfica en una sola cadena, lo que permite una autenticación sin estado.

Estructura de tres partes

Un JWT tiene la forma: base64url(header).base64url(payload).base64url(signature). El punto separa las partes. El encabezado y la carga útil se pueden leer (están codificados con base64url, no cifrados). Solo la firma es criptográfica.

Encabezado

El encabezado es un objeto JSON: {"alg":"HS256","typ":"JWT"}. alg especifica el algoritmo de firma (HS256, RS256, ES256, none). typ siempre es "JWT". Entre los encabezados adicionales se incluye kid (ID de clave) para seleccionar la clave.

Carga útil / claims

Claims registrados estándar: iss (emisor), sub (sujeto), aud (audiencia), exp (marca de tiempo Unix de expiración), nbf (no válido antes de), iat (emitido en), jti (ID del JWT para la revocación). Los claims personalizados son cualquier par clave-valor adicional.

Decodificación de un JWT

import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)

Verificación de firmas

Para HS256: HMAC-SHA256(base64url(header)+"."+base64url(payload), secret). El receptor vuelve a calcular este valor y lo compara con la parte de la firma. Si coinciden y el token no ha caducado, el token es válido.

Firmas asimétricas

Para RS256: la clave privada firma la cadena header.payload mediante RSA-SHA256. Cualquier parte que tenga la clave pública puede verificarla sin la clave privada. Las claves públicas se distribuyen mediante endpoints JWKS (JSON Web Key Set), por ejemplo, /.well-known/jwks.json.

Codificación Base64url

Base64url reemplaza + por - y / por _, y omite el relleno =. Esto hace que los JWT sean seguros en URL, encabezados HTTP y cookies sin necesidad de codificación porcentual. Los bytes originales siguen sin estar cifrados: solo están codificados.

Los JWT no están cifrados de forma predeterminada

La carga útil de un JWT es visible para cualquiera que la decodifique con base64url. Nunca incluya secretos (contraseñas, SSN) en la carga útil de un JWT, a menos que use JWE (JSON Web Encryption) con el algoritmo "enc" para obtener un cifrado real.

Duración del token

Establezca exp en una duración breve (de 15 a 60 minutos para tokens de acceso). Los JWT de larga duración acumulan riesgos: si son robados, siguen siendo válidos hasta que caduquen. Use tokens de actualización (almacenados de forma segura) para emitir nuevos tokens de acceso de corta duración.

Descubrimiento de JWKS

Los proveedores de autenticación (Auth0, Keycloak, Google) publican una URL de JWKS. El verificador obtiene las claves públicas mediante kid, las almacena en caché y verifica las firmas sin ponerse en contacto con el emisor en cada solicitud. La rotación de claves actualiza el endpoint de JWKS.

Comprobación rápida

¿Qué parte de un JWT contiene la firma criptográfica?

Resumen

Un JWT consta de tres partes JSON codificadas con base64url: encabezado (algoritmo), carga útil (claims) y firma. La carga útil se puede leer y no está cifrada. A continuación: elección entre HS256 y RS256.

Preguntas frecuentes

¿La lección «Anatomía de un JWT: encabezado, payload y firma» es gratis?

Sí — el texto completo de «Anatomía de un JWT: encabezado, payload y firma» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Anatomía de un JWT: encabezado, payload y firma»?

Descifre las partes en base64url y comprenda cada campo del JWT. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cryptology Academy?

No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Anatomía de un JWT: encabezado, payload y firma»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?

Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Anatomía de un JWT: encabezado, payload y firma
  2. HS256 frente a RS256: JWT simétricos y asimétricos
  3. Vulnerabilidades de JWT: alg=none y confusión de claves
  4. Buenas prácticas para implementar JWT de forma segura
← Volver a Cryptology Academy