Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.
“¿Dónde puse esa clave pública?”
Al usar un esquema basado en RSA para la verificación de firmas JWT, siempre se topa con el mismo muro: “¿cómo distribuyo la clave pública de forma segura?” y “¿cuando rote la clave, tengo que actualizar la configuración de cada servidor?”.
JWKS (JSON Web Key Set) resuelve exactamente este problema. El Generador de JWKS genera un par de claves RSA enteramente en su navegador, dándole tanto el formato JWKS (clave pública) como el formato PEM (clave privada) al instante.

JWKS: un “escaparate” de claves públicas
JWKS es un “conjunto de claves escritas en JSON”. Un servidor de autenticación (Auth0, Cognito, etc.) publica este JSON en una URL conocida — típicamente /.well-known/jwks.json — y cualquier servidor de API que necesite verificar un token lo obtiene desde ahí.
Por qué JWKS es conveniente
- Rotación automática — rotar la clave solo significa intercambiar el contenido detrás del endpoint. Los servidores de API obtienen la clave más reciente simplemente consultando la URL.
- Múltiples claves en vuelo — las claves “antiguas” y “nuevas” pueden coexistir, haciendo fluidos los periodos de transición.
- Un estándar mundial — ampliamente adoptado por OAuth 2.0 y OIDC, así que la mayoría de las bibliotecas lo admiten de fábrica.
Dentro de JWKS: qué significa cada campo
{
"keys": [
{
"kty": "RSA",
"n": "0vx7agoebGcQ...",
"e": "AQAB",
"kid": "f47ac10b-...",
"use": "sig",
"alg": "RS256",
"key_ops": ["verify"]
}
]
}
| Campo | Función |
|---|---|
kty | Tipo de clave (p. ej., RSA) |
n / e | La clave pública RSA en sí (módulo y exponente público) |
kid | ID de la clave. Se compara con el encabezado del JWT para seleccionar con qué clave verificar — la pieza clave de la rotación de claves |
use | Propósito. sig para verificación de firma (enc para cifrado) |
alg / key_ops | Declara el algoritmo y las operaciones permitidas, evitando el uso indebido en el lado verificador |
keys es un array, así que durante una rotación tanto la clave antigua como la nueva pueden coexistir, distinguidas por kid en el encabezado del JWT.
Generar un par de claves en el navegador
El Generador de JWKS combina la biblioteca jose con la API Web Crypto para generar un par de claves RSA de 2048 bits (para firma RS256) al instante.
- Clave pública (formato JWKS) — utilizable como simulacro de
/.well-known/jwks.json - Clave privada (formato PEM) — utilizable para firmar JWT
- Si no especifica un
kid, se genera uno aleatorio automáticamente
La generación ocurre enteramente en su navegador, así que la clave privada nunca toca internet. Es adecuado para levantar un servidor de autenticación simulado local, o para probar unitariamente su lógica de verificación JWT.
Cómo encaja JWKS en la verificación de firmas JWT
- El servidor de autenticación emite un JWT
- El encabezado del JWT incluye un
kidque identifica qué clave lo firmó - El servidor de la API obtiene el conjunto de claves públicas desde el endpoint JWKS
- Selecciona la clave pública cuyo
kidcoincide - Verifica la firma del JWT con esa clave pública
Este diseño significa que el servidor de la API nunca necesita tener una clave privada. La clave privada permanece únicamente en el servidor de autenticación; el lado verificador solo necesita claves públicas — una separación limpia de responsabilidades. Recuerde que el payload del JWT en sí solo está codificado en Base64URL, no cifrado — puede confirmarlo decodificando un token real con el decodificador JWT.
Qué vigilar con JWKS
- ¿Coincide el
kiddel encabezado JWT con unkiddel JWKS? - ¿Coincide
algcon el algoritmo de firma esperado? - ¿Se está cacheando adecuadamente el resultado de la obtención del JWKS?
- ¿Se mantienen temporalmente juntas las claves antiguas y nuevas durante la rotación?
- ¿Ha decidido cuándo eliminar una clave revocada?
Durante la rotación de claves específicamente, hay una ventana donde coexisten JWT firmados con la clave antigua y JWT firmados con la nueva. Es práctica estándar publicar ambas claves públicas en el JWKS durante esa ventana para que cualquiera de los dos tokens pueda verificarse.
Preguntas frecuentes
¿Puedo poner una clave privada en un JWKS?
No. Lo que publica externamente como JWKS es la clave pública usada para verificación de firmas. La clave privada debe permanecer únicamente con quien emite el JWT y nunca debe exponerse a navegadores o consumidores de la API.
¿Es obligatorio kid?
Es esencial en cuanto gestiona varias claves. Comparar el kid del encabezado JWT con el kid de una entrada JWKS es cómo el lado verificador sabe qué clave pública usar. Si espera rotar claves, vale la pena incluir kid desde el principio.
¿Cómo creo un JWKS para desarrollo local?
Genere un par de claves de prueba con el Generador de JWKS y use el lado de la clave pública como su JWKS. Mantenga separadas las claves de desarrollo y producción — nunca pegue ni comparta una clave privada de producción.
¿Puedo usar la clave generada en producción?
No lo recomendamos. El propósito de esta herramienta es desarrollo, pruebas y aprendizaje. La generación ocurre enteramente en su navegador y la clave nunca sale de él, pero las claves de firma de producción deberían generarse y almacenarse en un entorno gestionado como un HSM o un KMS.
Resumen
- JWKS distribuye claves públicas como JSON;
kides la pieza clave de la rotación de claves use/alg/key_opsdeclaran la intención para prevenir el uso indebido- Los verificadores nunca necesitan una clave privada — la clave pública obtenida del JWKS es todo lo que necesitan
- Durante la rotación, las claves antigua y nueva coexisten en el JWKS
Ahórrese tener que recordar de memoria las opciones de OpenSSL — genere lo que necesite aquí mismo.