Inspeccionar un JWKS y extraer las claves públicas en PEM
- Panel
- Documentación
- API
¿Qué es un JWKS?
Un JWKS (JSON Web Key Set, RFC 7517) es un documento JSON que agrupa una lista de claves públicas en forma estructurada. Sirve para publicar las claves que un emisor de JWT utiliza para firmar sus tokens, de modo que cualquier consumidor pueda recuperarlas y verificar la firma de los tokens que recibe. El formato siempre se presenta así:
{
"keys": [
{ "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" },
{ "kty": "EC", "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." }
]
}
Cada entrada de la tabla keys es una JWK (JSON Web Key) que
describe una clave pública: tipo de clave (kty), identificador (kid), uso
previsto (use), algoritmo objetivo (alg) y componentes criptográficos.
¿Cuándo sirve un JWKS?
El JWKS es la columna vertebral de las arquitecturas OAuth2 y OpenID Connect modernas. Se lo encontrará en varios contextos:
- Descubrimiento OIDC: todo proveedor OpenID Connect expone un documento de
configuración en
/.well-known/openid-configurationque contiene un campojwks_uri. En esa URL se encuentra un JWKS que lista las claves públicas activas. - Verificación de JWT: cuando su API recibe un token firmado en RS256 o ES256,
lee el
kiddel header, descarga el JWKS del emisor, encuentra la clave correspondiente, deriva de ella la clave pública en formato PEM y verifica la firma. - Rotación de claves: un emisor puede publicar varias claves simultáneamente, lo que permite introducir una nueva clave para firmar los nuevos tokens mientras se mantiene la antigua en servicio el tiempo que los tokens en circulación expiren.
- Federaciones: SAML, SCIM, servicios interconectados, la publicación de un JWKS evita tener que intercambiar manualmente certificados X.509 entre partners.
Campos esenciales de una JWK
Algunos campos aparecen sistemáticamente en una JWK. Esta herramienta los extrae y los muestra para cada clave del JWKS analizado:
kid(key ID): identificador único de la clave. Es ese valor el que el header de un JWT coloca en su campokidpara indicar qué clave del JWKS debe servir para la verificación.kty(key type): familia criptográfica. Los dos valores dominantes sonRSA(claves RSA clásicas, usadas con RS256, RS384, RS512) yEC(curvas elípticas, usadas con ES256, ES384, ES512).alg(algorithm): algoritmo de firma para el cual está prevista esta clave. Campo opcional pero a menudo presente. Permite filtrar rápidamente las claves utilizables para un JWT dado.use: uso de la clave.sigpara la firma (caso habitual),encpara el cifrado (raro, usado con JWE).
¿Por qué convertir una JWK a PEM?
La mayoría de las bibliotecas criptográficas clásicas (OpenSSL, openssl_verify en
PHP, crypto en Node.js, JCA en Java) aceptan las claves públicas en formato
PEM (Base64 encuadrado por -----BEGIN PUBLIC KEY-----), no directamente
en formato JWK. Convertir una JWK a PEM es, por tanto, indispensable para:
- Verificar manualmente la firma de un JWT desde un script o una herramienta de línea de comandos
(
jwt,jose,step crypto). - Importar la clave en una herramienta de depuración como JWT Verifier, que espera una clave PEM en su campo "clave pública".
- Almacenar una clave en caché local o en un fichero de configuración en una forma universal y legible.
- Comparar rápidamente dos claves (el formato PEM facilita los diff visuales).
Límites y advertencias
Esta herramienta admite las claves públicas RSA (kty=RSA) y EC
(kty=EC en las curvas P-256, P-384,
P-521). Los demás tipos (OKP para Ed25519, oct para
las claves simétricas) no se convierten: se señalan con un mensaje de error por
entrada, el resto del JWKS sigue siendo legible.
- La conversión se realiza en una única dirección: JWKS a PEM. La reconstrucción de una JWK a partir de una clave PEM existente no se cubre en esta versión.
- El JWKS debe pegarse tal cual como texto JSON. La recuperación
automática desde una URL
jwks_urio un endpoint OIDC no se realiza en el lado del servidor, para evitar llamadas salientes imprevistas. - Las claves privadas no deberían aparecer en un JWKS público, y esta herramienta solo extrae los componentes públicos aunque haya una clave privada presente.
Cómo utilizarlo
- Recupere el JWKS del emisor que quiera inspeccionar. Para un proveedor OIDC,
la dirección suele ser
https://exemple.com/.well-known/jwks.jsonohttps://exemple.com/oauth2/jwks. - Copie el documento JSON completo (el objeto que contiene la clave
keys). - Péguelo en la zona de entrada de la herramienta e inicie el análisis.
- Para cada clave del JWKS, la herramienta muestra su
kid, sukty, sualg, suusey la clave pública convertida en formato PEM. - Haga clic en "copiar" para recuperar la PEM y utilizarla en un script de verificación, en nuestro JWT Verifier o en cualquier herramienta compatible con OpenSSL.
Preguntas frecuentes
¿Dónde encontrar el JWKS de un proveedor OIDC?
La gran mayoría de los proveedores OpenID Connect publican un documento de descubrimiento en
https://exemple.com/.well-known/openid-configuration. Ese JSON contiene un campo
jwks_uri que apunta al JWKS efectivo. Algunos proveedores sirven directamente
el JWKS en https://exemple.com/.well-known/jwks.json o en un endpoint OAuth2
dedicado. Descargue el contenido y péguelo aquí tal cual.
¿Por qué es importante el kid?
El kid (key ID) es el identificador que el header de un JWT coloca en su propio campo
kid para indicar qué clave del JWKS debe servir para la verificación. Sin ese
identificador, el consumidor debería probar cada clave del JWKS, lo que complica el diagnóstico en
caso de error. La presencia de un kid por clave se considera, por tanto, una buena
práctica, y todos los IdP serios publican uno.
¿Cuál es la diferencia entre kty=RSA y kty=EC?
RSA es la familia histórica de firmas asimétricas, utilizada con RS256, RS384, RS512. Las
claves se describen mediante un módulo n y un exponente e. EC (Elliptic
Curve) es más reciente y produce firmas más cortas para un nivel de seguridad equivalente.
Las claves EC se describen mediante una curva (crv = P-256, P-384 o P-521) y dos
coordenadas x e y. Esta herramienta convierte las dos familias a PEM.
¿Cómo utilizar la PEM extraída para verificar un JWT?
Copie la PEM y, después, péguela en el campo "clave pública" de nuestro
JWT Verifier junto con el JWT que validar. También puede
utilizarla desde la línea de comandos con openssl dgst, desde Node.js con
crypto.verify, desde Python con cryptography o
PyJWT, desde Java con la JCA, etc. El formato PEM es universalmente reconocido.
Mi JWKS contiene una clave Ed25519 (OKP), ¿por qué no se convierte?
La conversión de las claves OKP (Ed25519, Ed448, X25519, X448) requiere una lógica
específica y una codificación DER distinta de la de las claves RSA y EC. Esta versión de la herramienta solo
admite RSA y EC. Las claves no gestionadas se señalan
individualmente con un mensaje de error, sin bloquear el análisis de las demás entradas del JWKS.
¿Se puede recuperar el JWKS desde una URL en lugar de pegarlo?
No en esta versión. La herramienta no realiza ninguna llamada HTTP saliente para mantenerse rápida y evitar
actuar como un proxy involuntario. Descargue el JWKS desde su navegador o con
curl https://exemple.com/.well-known/jwks.json y, después, pegue el contenido en el campo
de entrada.
Ejemplo de solicitud
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Esquema de entrada
| Campo | Tipo | Obligatorio | Por defecto |
|---|---|---|---|
jwks |
text | – |
Puntos de acceso
GET https://cdrn.fr/api/v1/tools- lista todas las herramientas disponiblesGET https://cdrn.fr/api/v1/tools/jwks-inspector- recupera el esquema de esta herramientaPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- ejecuta esta herramienta con un payload JSON