
Vérifier une signature JWT contre un JWKS sans backend
Collez un token et un JWKS pour vérifier une signature RS256, ES256 ou HS256 dans le navigateur. Choix par kid, erreurs mesurées, claims à contrôler.
Vérifier une signature demande le token et la bonne clé publique
Décoder un JWT montre ce qu’il affirme. Le vérifier montre si la clé attendue a signé ces affirmations. Chez un fournisseur OpenID Connect comme Auth0, Keycloak ou Cognito, cette clé se trouve dans un JWKS, un document JSON de clés publiques. Ce guide explique comment le vérificateur choisit une clé et comment lire sa réponse quand une intégration échoue. Il s’appuie sur l’outil JWT verify, qui prend le JWKS sous forme de texte collé et n’ouvre jamais d’adresse, donc sans serveur. Le 26 octobre 2026, nous avons passé 31 cas de test dans le code du vérificateur et nous rapportons chaque résultat. Ils couvrent des tokens RS256, ES256 et HS256, ainsi que des tokens modifiés, expirés ou mal appariés. Les règles viennent des RFC 7515, 7517, 7518, 7519 et 8725. Pour lire un token avant de le vérifier, commencez par notre guide d’encodage et de décodage JWT.
Comment fonctionne un JWKS et comment la clé est choisie
La RFC 7517 définit un JWK Set comme un objet avec un tableau keys. L’ordre des clés n’exprime aucune préférence, sauf décision de l’application. Chaque clé indique son type dans kty et porte les nombres nécessaires au contrôle d’une signature.
Améliorations
crv, x et y. Une clé P-256 produit des signatures ES256.sig pour signer ou enc pour chiffrer.oct contient un secret partagé dans k. C’est du matériel privé, même dans un document nommé jeu de clés.La RFC 7515 présente kid comme un indice sur la clé qui a protégé le token, et l’en-tête est facultatif. Le vérificateur le compare au kid de chaque JWK. Le comportement sans correspondance dépend de l’outil, alors nous l’avons testé.
Améliorations
Le troisième segment du token est la signature. Sa longueur et son codage dépendent de l’algorithme, ce qui explique des échecs qui ressemblent à une corruption.
Améliorations
Une signature valide montre que le détenteur de la clé privée a signé cet en-tête et ce payload. Elle ne montre pas que le token vise votre service ni qu’il est encore en cours de validité.
Améliorations
other et un iss valant https://evil.example ont échoué comme erreurs de claims, alors que la signature était correcte.Déboguer un token OIDC sans serveur
Copiez le token d’accès ou d’identité de la requête qui échoue, sans le préfixe Bearer. Récupérez ensuite le JWKS chez le fournisseur. Son adresse est la valeur jwks_uri du document de découverte, servi à l’adresse de l’émetteur suivie de /.well-known/openid-configuration.
https://VOTRE_DOMAINE/.well-known/jwks.json.https://cognito-idp.REGION.amazonaws.com/ID_POOL/.well-known/jwks.json et signe ses tokens en RS256./realms/REALM/protocol/openid-connect/certs. Les versions récentes n’ajoutent plus l’ancien préfixe /auth.Les mêmes décisions valent dans l’outil et dans le code de production. Posez-les une fois, dans votre configuration, et ne les lisez jamais dans le token.
Lire la réponse du vérificateur
L’outil répond key_not_found quand le token n’a pas de kid et que le jeu contient plusieurs clés, ou quand son kid est absent du jeu.
L’outil a trouvé une clé et le contrôle a échoué. Plusieurs causes donnent le même message.
Certaines réponses arrivent avant tout contrôle de signature.
Bearer. Dans notre test, l’outil ne l’a pas retiré. Un retour à la ligne en fin de texte n’a rien gêné.keys vide.alg none : un token sans signature ne se vérifie pas, et votre serveur doit aussi le refuser.oct.Quatre erreurs de vérification avec un JWKS
La signature prouve qui a émis le token. Elle ne dit rien de ce que son porteur peut faire sur votre service.
Un JWK avec d, ou une clé oct avec k, est un secret. Un jeu de clés publiques n’en a jamais besoin.
hasPrivate pour chaque clé, et la vue formatée retire d, les facteurs RSA et k des clés oct.L’en-tête alg appartient à l’expéditeur. Si le vérificateur le suit, c’est l’attaquant qui choisit le contrôle.
algorithms et se fier à l’en-tête alg.alg none sur une route de test qui arrive en production.enc l’a vérifié aussi. Le code de production doit être plus strict.key_ops, comme le fait jose.Les deux extrêmes échouent. L’un ajoute un appel réseau à chaque requête, l’autre bloque les utilisateurs à la première rotation.
Quatre idées reçues sur les JWKS et les signatures
L’étiquette est écrite par l’expéditeur, elle ne prouve donc rien seule.
On hésite à en coller un dans un outil.
oct, dont la valeur k est un secret partagé à ne jamais publier.Cette croyance mène à du code de conversion inutile dans un JWT.
L’idée vient des bibliothèques qui téléchargent les clés et les gardent en cache sur un serveur.
Vérifier et inspecter dans le navigateur
L’outil JWT verify contrôle la signature et, si vous le demandez, l’audience, l’émetteur et les claims de temps. Il gère 14 algorithmes, dont RS256, ES256 et HS256.
Collez le token
Collez d’abord le JWT compact. Les onglets de clé suivent l’alg lu dans son en-tête.
Collez le corps du JWKS
Collez le JSON du jeu de clés, un JWK seul ou un PEM public. Pour transformer d’abord une clé PEM en JWK, utilisez le convertisseur PEM et JWK. Pour un token HS256, utilisez l’onglet Secret HMAC.
Réglez les contrôles
Saisissez l’audience et l’émetteur si vous voulez les comparer, et choisissez une tolérance d’horloge de 0, 60 ou 300 secondes. L’option Ignorer expiration contrôle quand même la signature.
Lisez le verdict
Le résultat affiche valide avec l’algorithme et le kid, ou un code d’erreur décrit dans la section de dépannage ci-dessus.
L’inspecteur JWKS lit un JWK ou un JWKS sans rien vérifier. Utilisez-le avant le vérificateur quand le jeu vient de quelqu’un d’autre.
Collez le JWKS
Collez un jeu de clés ou une clé seule. Les champs privés sont retirés de la sortie et de la copie.
Passez à la vue Inventaire
L’inventaire liste kid, kty, use, alg, crv et hasPrivate pour chaque clé, sans afficher de matériel de clé.
Triez les clés
L’option Trier les clés ordonne le JSON pour comparer deux environnements avec un diff.
Les deux pages travaillent sur du texte collé. Quelques limites sont utiles à connaître.
Les mêmes contrôles dans un terminal et dans votre code
Remplacez l’adresse par celle de votre émetteur. La dernière commande lit le kid dans le premier segment d’un token placé dans la variable TOKEN.
Exemple de base
createRemoteJWKSet télécharge le jeu, le garde en cache et choisit la clé d’après kid et alg. L’algorithme, l’émetteur et l’audience viennent de votre configuration.
Exemple de base
createLocalJWKSet prend le jeu que vous avez déjà. Dans nos tests, il a levé ERR_JWKS_NO_MATCHING_KEY pour un kid inconnu. Il a levé ERR_JWKS_MULTIPLE_MATCHING_KEYS pour un token sans kid et deux clés RSA. Il a levé ERR_JOSE_ALG_NOT_ALLOWED quand la liste d’algorithmes excluait l’alg du token.
Exemple de base
Conclusion
Vérifier avec un JWKS revient à trois décisions. Choisissez la clé par kid et alg. Contrôlez iss, aud et exp. Quand la clé manque, rechargez le jeu au lieu de faire confiance au token. Les outils du navigateur permettent de reproduire chaque cas avec du texte collé avant de toucher à un serveur. Examinez le jeu, vérifiez le token, puis reprenez les mêmes réglages dans votre code.
Essayez les outils de clés dans votre navigateur
hasPrivate avant de le coller où que ce soit.Articles connexes

HTTP/2 et HTTP/3 changent le trajet des fichiers, pas leur poids. Mesures de taille, de compilation et de bundling : ce que la minification apporte encore.

Convertissez un epoch Unix en date lisible et inversement, distinguez secondes et millisecondes, et évitez les pièges de fuseau, de JWT et de changement d’heure.

Lisez une expression cron champ par champ, voyez ses prochaines exécutions en UTC ou en heure locale et évitez les pièges de pas, de fuseau et de dialecte.