Décodeur JWT
Décodez un JSON Web Token (JWT) pour voir son en-tête, sa charge utile et sa signature. Utile pour déboguer et inspecter les jetons JWT utilisés pour l'authentification et l'autorisation. Le contenu de votre JWT ne sera enregistré nulle part.
Charge utile (Claims):
En-tête (Algorithme de signature et type de jeton):
Signature:
La signature est affichée sous forme de données encodées en Base64URL. Cet outil ne vérifie pas la signature.
Plus sur les JSON Web Tokens
Format JWT
Un JSON Web Token (JWT) est un moyen compact et sûr pour les URL de représenter des claims à transférer entre deux parties. Il se compose de trois parties encodées en Base64URL séparées par des points: header.payload.signature. L'en-tête contient généralement le type de jeton (JWT) et l'algorithme de signature. La charge utile contient les claims—des déclarations sur une entité (généralement l'utilisateur) et des métadonnées supplémentaires. La signature est utilisée pour vérifier que le message n'a pas été modifié en cours de route.
JOSE (JSON Object Signing and Encryption)
JWT fait partie du framework plus large JOSE (JSON Object Signing and Encryption), qui fournit une méthode standardisée pour sécuriser les données basées sur JSON. JOSE comprend plusieurs spécifications connexes: JWS (JSON Web Signature) pour les jetons signés, JWE (JSON Web Encryption) pour les jetons chiffrés, JWK (JSON Web Key) pour représenter les clés cryptographiques, et JWA (JSON Web Algorithms) pour spécifier les algorithmes cryptographiques.
JSON Web Signature (JWS)
La plupart des JWTs que vous rencontrez sont des jetons JWS—ils sont signés mais non chiffrés. Cela signifie que n'importe qui peut lire la charge utile en la décodant en Base64URL, mais ne peut pas la modifier sans invalider la signature. JWS fournit l'intégrité et l'authenticité: vous pouvez vérifier que le jeton a été émis par une partie de confiance et n'a pas été falsifié.
Algorithmes de signature
JWS prend en charge divers algorithmes cryptographiques pour signer les jetons. Ceux-ci se divisent en deux catégories: les algorithmes symétriques (même clé pour signer et vérifier) et les algorithmes asymétriques (clé privée pour signer, clé publique pour vérifier).
Algorithmes HMAC (Symétriques)
HS256, HS384 et HS512 utilisent HMAC (Hash-based Message Authentication Code) avec SHA-256, SHA-384 ou SHA-512 respectivement. Ce sont des algorithmes symétriques—la même clé secrète est utilisée à la fois pour signer et vérifier le jeton. Les algorithmes HMAC sont rapides et simples mais nécessitent une distribution sécurisée des clés car les deux parties ont besoin du même secret.
Algorithmes RSA (Asymétriques)
RS256, RS384 et RS512 utilisent RSASSA-PKCS1-v1_5 avec SHA-256, SHA-384 ou SHA-512. PS256, PS384 et PS512 utilisent RSASSA-PSS (schéma de signature probabiliste). Les algorithmes RSA utilisent une clé privée pour signer et une clé publique pour vérifier. Cela permet de partager publiquement la clé de vérification sans compromettre la sécurité—idéal pour les systèmes distribués où plusieurs services doivent vérifier les jetons.
Algorithmes à courbe elliptique (Asymétriques)
ES256, ES384 et ES512 utilisent ECDSA (Elliptic Curve Digital Signature Algorithm) avec les courbes P-256, P-384 ou P-521 respectivement. Les algorithmes EC offrent la même sécurité que RSA mais avec des tailles de clé plus petites, ce qui donne des signatures plus petites et des opérations plus rapides. ES256 est de plus en plus populaire pour les applications modernes en raison de son efficacité.
JSON Web Encryption (JWE)
Alors que JWS fournit des jetons signés, JWE fournit des jetons chiffrés où la charge utile est confidentielle. Les jetons JWE ont cinq parties au lieu de trois: en-tête, clé chiffrée, vecteur d'initialisation, texte chiffré et balise d'authentification. JWE prend en charge divers algorithmes de chiffrement, notamment AES-GCM et AES-CBC avec HMAC. Notez que ce décodeur ne gère que les jetons JWS; les jetons JWE nécessitent un déchiffrement avec la clé appropriée.
Spécifications RFC
Les standards JWT et JOSE sont définis dans plusieurs RFCs de l'IETF: