Contrôler un JWKS avant de le publier
Avant de mettre en ligne /.well-known/jwks.json, vérifiez qu’aucune clé ne contient d ou k et que chaque clé porte un kid unique.
Collez une JWK ou un JWKS pour obtenir un tableau par clé (kid, kty, alg, use, key_ops, empreinte SHA-256 RFC 7638) et des avertissements : kty ou kid manquant, kid en double, matériel de clé privée publié par erreur.
Avertissements
| # | kid | kty | alg | use | key_ops | Nature | Empreinte SHA-256 (RFC 7638) |
|---|
L’inspecteur JWK / JWKS rend lisible un jeu de clés JSON Web Key, tel que celui publié à l’adresse jwks_uri d’un fournisseur OpenID Connect. Il s’adresse aux développeurs et équipes sécurité qui publient ou consomment un JWKS et veulent vérifier en un coup d’œil quelles clés il contient, comment elles sont identifiées et si aucune donnée privée n’y figure par erreur.
Une JWK (RFC 7517) décrit une clé en JSON : kty donne la famille (RSA, EC, oct), kid l’identifiant, alg l’algorithme prévu, use l’usage (sig pour signature, enc pour chiffrement) et key_ops les opérations autorisées. Un JWKS est simplement un objet {"keys":[…]} qui en regroupe plusieurs. L’outil accepte les deux formes, affiche une ligne par clé et résume le nombre de clés, les types présents et les kid distincts. Il calcule aussi l’empreinte RFC 7638 de chaque clé : le hash SHA-256, encodé en Base64URL, d’un JSON canonique ne contenant que les membres obligatoires classés par ordre alphabétique, soit e, kty et n pour RSA, crv, kty, x et y pour EC, k et kty pour une clé symétrique.
Les avertissements ciblent les erreurs réelles de publication : kty absent (la clé est inexploitable), kid absent alors que le jeu compte plusieurs clés (le vérificateur ne peut pas savoir laquelle utiliser), kid en double, et surtout présence de matériel privé. Pour RSA, les membres d, p, q, dp, dq et qi constituent la clé privée ; pour EC, c’est d ; pour une clé symétrique oct, le membre k est lui-même le secret. Un JWKS public ne doit contenir que des clés publiques, faute de quoi n’importe qui peut signer des jetons à votre place. Le résultat peut être exporté en JSON.
Collez une clé seule {"kty":…} ou un jeu complet {"keys":[…]}, par exemple copié depuis l’URL jwks_uri de votre fournisseur.
Pour chaque clé, consultez kid, kty, alg, use, key_ops et l’empreinte SHA-256 RFC 7638, ainsi que le résumé du nombre de clés, des types et des kid distincts.
Corrigez les kty ou kid manquants, les kid en double et retirez toute donnée privée, puis exportez le résultat en JSON si besoin.
Avant de mettre en ligne /.well-known/jwks.json, vérifiez qu’aucune clé ne contient d ou k et que chaque clé porte un kid unique.
Collez le JWKS de votre fournisseur (Auth0, Keycloak, Entra ID, Google) pendant une rotation pour voir l’ancienne et la nouvelle clé côte à côte, avec leur kid et leur empreinte.
Comparez le kid lu dans l’en-tête d’un JWT avec ceux du JWKS pour identifier la clé attendue, puis vérifiez la signature avec le vérificateur JWT.
Une JWK est une seule clé représentée en JSON, avec des champs comme kty, n, e ou x et y. Un JWKS (JSON Web Key Set) est un objet {"keys":[…]} qui contient une liste de JWK, généralement publié par un serveur d’autorisation pour que les clients vérifient ses jetons.
C’est un identifiant calculé selon la RFC 7638 : le SHA-256 d’un JSON canonique ne contenant que les membres obligatoires de la clé publique, encodé en Base64URL. Deux représentations d’une même clé donnent toujours la même empreinte, et l’empreinte d’une clé privée est celle de sa clé publique. Beaucoup de fournisseurs l’utilisent comme kid.
La RFC 7517 le rend facultatif, mais dès qu’un JWKS contient plusieurs clés, il devient indispensable : c’est le kid de l’en-tête du JWT qui permet de choisir la bonne clé. Sans lui, le vérificateur doit essayer chaque clé, ce que beaucoup de bibliothèques refusent.
Une JWK RSA est privée si elle contient d (et souvent p, q, dp, dq, qi) ; une JWK EC est privée si elle contient d ; une clé oct contient toujours le secret dans k. L’outil signale ces membres. Une clé publique RSA ne contient que kty, n et e, plus d’éventuelles métadonnées.
RSA désigne une clé RSA utilisée par exemple avec RS256 ou PS256 ; EC une clé à courbe elliptique (P-256, P-384, P-521) utilisée avec ES256, ES384 ou ES512 ; oct une clé symétrique, c’est-à-dire une suite d’octets secrète utilisée avec HS256 ou pour du chiffrement AES.
use indique l’usage général de la clé : sig pour la signature, enc pour le chiffrement. key_ops liste précisément les opérations autorisées, comme verify, sign, encrypt ou wrapKey. La RFC 7517 recommande de ne pas utiliser les deux ensemble ou, si c’est le cas, qu’ils restent cohérents.
Outils associés
Des outils similaires ou complémentaires à celui-ci.
Vérifiez la signature d’un JWT avec un secret HMAC ou une clé publique JWK, JWKS ou PEM, puis contrôlez exp, nbf, iss et aud.
Décodez un JWT pour lire son en-tête, son payload, ses claims et ses dates d’expiration.
Générez un code_verifier PKCE, son code_challenge S256 et un state pour votre requête d’autorisation OAuth.
Comprenez comment OAuth 2.0, PKCE, JWT, JWK et JWKS s’articulent sans les confondre : autorisation, jetons, clés publiques et vérification.
Apprenez ce qu’un JWT contient, ce que sa signature prouve réellement et pourquoi décoder un jeton ne revient pas à le vérifier.
Apprenez à construire une CSP progressive, comprendre ses directives et éviter les politiques trop permissives ou cassantes.