
Verificar la firma de un JWT con un JWKS sin backend
Pega un token y un JWKS para comprobar una firma RS256, ES256 o HS256 en el navegador. Elección de la clave por kid, errores medidos y claims que revisar.
Comprobar una firma exige el token y la clave pública correcta
Decodificar un JWT muestra lo que afirma. Verificarlo muestra si la clave esperada firmó esas afirmaciones. Con un proveedor de OpenID Connect como Auth0, Keycloak o Cognito, esa clave está en un JWKS, un documento JSON de claves públicas. Esta guía explica cómo el verificador elige una clave y cómo leer su respuesta cuando una integración falla. Usa la herramienta JWT verify, que toma el JWKS como texto pegado y nunca abre una dirección, así que no hace falta un servidor. El 26 de octubre de 2026 pasamos 31 casos de prueba por el código del verificador y contamos qué devolvió cada uno. Incluyen tokens RS256, ES256 y HS256, además de tokens alterados, caducados o mal emparejados. Las reglas salen de las RFC 7515, 7517, 7518, 7519 y 8725. Si antes quieres leer un token, empieza por nuestra guía para codificar y decodificar JWT.
Cómo funciona un JWKS y cómo se elige la clave
La RFC 7517 define un JWK Set como un objeto con un arreglo keys. El orden de las claves no expresa preferencia, salvo que la aplicación decida otra cosa. Cada clave indica su tipo en kty y lleva los números necesarios para comprobar una firma.
Mejoras
n y el exponente e. En nuestra prueba, el valor n de una clave de 2048 bits tenía 342 caracteres Base64URL.crv y las coordenadas x y y. Una clave P-256 produce firmas ES256.use son etiquetas opcionales. use vale sig para firmar o enc para cifrar.use) ocupaba 997 caracteres, así que un JWKS pegado sigue siendo pequeño.oct guarda un secreto compartido en k. Es material privado, incluso dentro de un documento llamado conjunto de claves.La RFC 7515 llama a kid una pista sobre la clave que protegió el token, y la cabecera es opcional. El verificador la compara con el kid de cada JWK. Lo que ocurre sin coincidencia depende de la herramienta, así que lo probamos.
Mejoras
El tercer segmento del token es la firma. Su longitud y su codificación dependen del algoritmo, lo que explica algunos fallos que parecen corrupción.
Mejoras
Una firma válida muestra que quien tiene la clave privada firmó esta cabecera y este payload. No muestra que el token sea para tu servicio ni que siga vigente.
Mejoras
other y un iss con https://evil.example fallaron como errores de claims, aunque la firma era correcta.Depurar un token OIDC sin servidor
Copia el token de acceso o de identidad de la petición que falla, sin el prefijo Bearer. Después consigue el JWKS del proveedor. Su dirección es el valor jwks_uri del documento de descubrimiento, que se sirve en la dirección del emisor seguida de /.well-known/openid-configuration.
https://TU_DOMINIO/.well-known/jwks.json.https://cognito-idp.REGION.amazonaws.com/ID_DEL_POOL/.well-known/jwks.json y firma sus tokens con RS256./realms/REALM/protocol/openid-connect/certs. Las versiones recientes ya no añaden el antiguo prefijo /auth.Las mismas decisiones valen en la herramienta y en el código de producción. Fíjalas una vez, en tu configuración, y nunca las leas del token.
Leer la respuesta del verificador
La herramienta responde key_not_found cuando el token no tiene kid y el conjunto contiene varias claves, o cuando su kid no está en el conjunto.
La herramienta encontró una clave y la comprobación falló. Varias causas dan el mismo mensaje.
Algunas respuestas llegan antes de cualquier comprobación de firma.
Bearer. En nuestra prueba la herramienta no lo quitó. Un salto de línea al final no molestó.keys vacío.alg none: un token sin firma no se puede verificar, y tu servidor también debe rechazarlo.oct.Cuatro errores al verificar con un JWKS
La firma demuestra quién emitió el token. No dice nada sobre lo que su portador puede hacer en tu servicio.
Un JWK con d, o una clave oct con k, es un secreto. Un conjunto de claves públicas nunca lo necesita.
d.d.hasPrivate por clave, y la vista formateada quita d, los factores RSA y la k de las claves oct.La cabecera alg pertenece al remitente. Si el verificador la sigue, es el atacante quien elige la comprobación.
algorithms y fiarse de la cabecera alg.alg none en una ruta de prueba que llega a producción.use enc también. El código de producción debe ser más estricto.use y key_ops, como hace jose.Los dos extremos fallan. Uno añade una llamada de red a cada petición, el otro deja fuera a los usuarios en la primera rotación.
Cuatro ideas falsas sobre JWKS y firmas
La etiqueta la escribe el remitente, así que por sí sola no demuestra nada.
Mucha gente duda antes de pegar uno en una herramienta.
oct, cuyo valor k es un secreto compartido que nunca debes publicar.Esta creencia lleva a escribir código de conversión que un JWT no necesita.
La idea viene de las bibliotecas que descargan las claves y las guardan en caché en un servidor.
Verificar e inspeccionar en el navegador
La herramienta JWT verify comprueba la firma y, si lo pides, la audiencia, el emisor y los claims de tiempo. Admite 14 algoritmos, entre ellos RS256, ES256 y HS256.
Pega el token
Pega primero el JWT compacto. Las pestañas de clave siguen el alg leído en su cabecera.
Pega el cuerpo del JWKS
Pega el JSON del conjunto de claves, un JWK suelto o un PEM público. Para convertir antes una clave PEM en JWK, usa el conversor de PEM y JWK. Para un token HS256, usa la pestaña Secreto HMAC.
Ajusta las comprobaciones
Escribe la audiencia y el emisor si quieres compararlos, y elige una tolerancia de reloj de 0, 60 o 300 segundos. La opción Ignorar caducidad sigue comprobando la firma.
Lee el veredicto
El resultado muestra válido con el algoritmo y el kid, o un código de error descrito en la sección de resolución de problemas de arriba.
El inspector de JWKS lee un JWK o un JWKS sin verificar nada. Úsalo antes del verificador cuando el conjunto venga de otra persona.
Pega el JWKS
Pega un conjunto de claves o una clave suelta. Los campos privados se quitan de la salida y de la copia.
Cambia a la vista Inventario
El inventario lista kid, kty, use, alg, crv y hasPrivate por clave, sin mostrar material de clave.
Ordena las claves
La opción Ordenar claves ordena el JSON para comparar dos entornos con un diff.
Las dos páginas trabajan con texto pegado. Conviene conocer algunos límites.
Las mismas comprobaciones en un terminal y en tu código
Sustituye la dirección por la de tu emisor. El último comando lee el kid del primer segmento de un token guardado en la variable TOKEN.
Ejemplo básico
createRemoteJWKSet descarga el conjunto, lo guarda en caché y elige la clave por kid y alg. El algoritmo, el emisor y la audiencia salen de tu configuración.
Ejemplo básico
createLocalJWKSet toma el conjunto que ya tienes. En nuestras pruebas lanzó ERR_JWKS_NO_MATCHING_KEY ante un kid desconocido. Lanzó ERR_JWKS_MULTIPLE_MATCHING_KEYS ante un token sin kid y dos claves RSA, y ERR_JOSE_ALG_NOT_ALLOWED cuando la lista de algoritmos excluía el alg del token.
Ejemplo básico
Conclusión
Verificar con un JWKS se reduce a tres decisiones. Elige la clave por kid y alg. Comprueba iss, aud y exp. Si falta la clave, recarga el conjunto en lugar de confiar en el token. Las herramientas del navegador permiten reproducir cada caso con texto pegado antes de tocar un servidor. Inspecciona el conjunto, verifica el token y copia después los mismos ajustes a tu código.
Prueba las herramientas de claves en tu navegador
hasPrivate antes de pegarlo en cualquier sitio.Artículos relacionados

HTTP/2 y HTTP/3 cambian el trayecto de los archivos, no su peso. Mediciones de tamaño, compilación y bundling muestran lo que la minificación aún aporta.

Convierte un epoch Unix en una fecha legible y al revés, distingue segundos de milisegundos y evita las trampas de zona horaria, JWT y cambio de hora.

Lee una expresión cron campo a campo, comprueba sus próximas ejecuciones en UTC o en hora local y evita las trampas de pasos, zonas horarias y dialectos.