Qué es un par de claves JWT
Un JWT es un token de autenticación que tu servidor entrega a los usuarios logueados para que puedan demostrar quiénes son en cada petición posterior. El servidor firma el token con una clave privada, el cliente lo devuelve en cada petición y cualquier servicio que tenga la clave pública correspondiente puede verificar que la firma fue real y que el payload no se modificó por el camino.
Para que todo eso funcione necesitas un par de claves: una clave privada que vive en el servidor que firma y una clave pública que compartes (a menudo como un documento JWK publicado en `/.well-known/jwks.json`) para que los verificadores comprueben la firma sin ver nunca el secreto.
Esta herramienta genera ese par para cualquier algoritmo de firma moderno: RS256/RS384/RS512 (RSA clásico), PS256 (RSA-PSS, la variante RSA más segura), ES256/ES384/ES512 (curva elíptica) o EdDSA (Ed25519, el más pequeño y rápido). Obtienes las claves en formato PEM y JWK, más un JWT firmado de muestra que puedes decodificar al momento en el decodificador de JWT para ver el round trip completo. Generado en servidor con el módulo nativo `crypto` de Node, nunca almacenado.
Cómo usarlo
- Elige un algoritmo. RS256 es el default para la mayoría de setups (Auth0, Okta, Keycloak y AWS Cognito lo usan por defecto). ES256 da tokens mucho más pequeños. EdDSA es el favorito moderno: claves más pequeñas, firma más rápida, implementación más simple.
- Para la familia RSA (RS256, RS384, RS512, PS256): elige un tamaño de clave. 2048 bits es el default razonable. 3072 y 4096 bits son exponencialmente más lentos con ganancia de seguridad real insignificante.
- Para la familia EC (ES256, ES384, ES512): la curva se elige automáticamente (P-256, P-384, P-521 respectivamente). Son las únicas que el RFC 7518 permite para cada algoritmo.
- Para EdDSA: siempre usamos Ed25519, la curva estandarizada por el RFC 8037 para JWS. Aquí no hay nada que tocar.
- Pulsa Generar. Devolvemos: la clave privada en PEM, la clave pública en PEM, la clave privada como JWK, la clave pública como JWK, más un JWT de muestra firmado con un payload diminuto (`sub: user-123`, válido durante 1 hora) para que verifiques end-to-end que las claves funcionan.
- Guarda la clave privada ya. Nosotros no la almacenamos. Cerrar esta pestaña la pierde para siempre. Instálala en tu servidor de auth, en tu API gateway o donde acuñes tokens.
- Publica la clave pública como documento JWKS en `https://tu-dominio.com/.well-known/jwks.json`. La mayoría de librerías (jose, jsonwebtoken, PyJWT, Microsoft.IdentityModel) pueden cachear esa URL automáticamente.
- Pulsa Abrir en el decodificador junto al JWT de muestra para ver el header, el payload y la firma parseados en vivo en el decodificador de JWT. Confirma que el kid del header coincide con el JWK que has publicado.
Cuándo es útil
Seis situaciones comunes en las que un par de claves de firma JWT fresco compensa:
- Montar un servicio de auth nuevo (Keycloak, Ory Hydra, Auth0 self-hosted, un servidor OAuth propio, un API gateway interno). Necesitas el par antes de poder acuñar un solo token.
- Migrar de HS256 a RS256/ES256/EdDSA. HS256 usa un secreto compartido que obliga a cada verificador a tener el poder de firma. Los algoritmos asimétricos te dejan mantener la clave privada en el servidor de auth y entregar la pública libremente. Es el camino estándar de mejora para cualquier sistema que crezca más allá de un servicio.
- Rotación de claves cada 3-12 meses como práctica de higiene de seguridad. Genera una clave nueva bajo un nuevo kid, publica ambas claves en tu JWKS, cambia el firmante a la nueva clave y retira la antigua tras el periodo de gracia.
- Sospecha de compromiso de clave. Brecha en el servidor, commit accidental del PEM a un repo público, ex empleado con acceso a la clave. Genera un par nuevo, rota, revoca el kid antiguo en el JWKS, fuerza el logout de las sesiones activas.
- Arquitecturas multi-emisor. Cada servicio acuña sus propios tokens; cada uno recibe su propio par para que los radios de impacto de un compromiso sean independientes.
- Pruebas y demos. ¿Necesitas un JWT funcional para probar una librería de verificación? Genera un par, firma la muestra y tienes un ejemplo end-to-end real en un clic.
Herramientas relacionadas: decodificador JWT (decodifica e inspecciona cualquier JWT), generador de pares DKIM, verificación bcrypt, hash de contraseña, generador UUID.