Un JSON Web Token (JWT) ressemble a una longue stringa aleatoire, mais questo non sono que trois morceaux colles con dei points. Le premier dit come il token a ete construit. Le deuxieme, questo sono i claims - per qui il est, quando il expire, e tutto questo que l'emetteur e a mis. Le troisieme e una signature qu'un server di confiance puo controler. Questa guida parcourt ogni partie, i claims del quotidien, e la difference tra lire un token e s'y fier. Per inspecter un vrai jeton, collez-le in il Decodeur JWT - tutto tourne in il navigateur, rien non e envoye.
Risposta rapida
Un JWT, e header.payload.signature. L'en-tete e il payload sono del JSON in Base64URL. L'en-tete a presque sempre alg e typ. Le payload porte dei claims comme sub, iat e exp piu tuoi champs. La signature e il troisieme segment. Decoder montre questi oggetti JSON. Cela non prouve non que il token e authentique - verificare exige il secret o la chiave publique su un server di confiance.
Trois parties jointes par dei points
RFC 7519 definit un JWT compact comme trois segments Base64URL separes par un point. Pas d'enveloppe extra, non di JSON autour, e in general non di signes egal di padding. Si vous coupez su . vous obtenez sempre trois chaines, stesso si la derniere e vide (la forme non securisee alg none).
- En-tete : metadonnees del jeton, presque sempre del JSON con alg e typ.
- Payload : i claims. C'est questo que i API lisent vraiment.
- Signature : una etiquette cryptographique su l'en-tete e il payload. Cet articolo e l'outil la traitent comme dei byte opaques.
Quiconque sait ecrire del JSON puo fabriquer un en-tete e un payload e i encoder in Base64URL. C'est perche i deux premieres parties sono publiques. Quiconque intercepte un JWT puo lire questi claims. Les dati confidentielles n'ont non loro place in un JWT sauf si vous il chiffrez anche (JWE), un altro format.
L'en-tete
L'en-tete dit ai verifieurs come traiter il jeton. C'est un petit oggetto JSON. Apres decodage Base64URL del premier segment, vous voyez in general :
- alg - l'algorithme di signature (ou none). Valeurs courantes : HS256 (HMAC con secret partage), RS256 o ES256 (cles asymetriques).
- typ - in general JWT. Certains emetteurs l'omettent.
- kid - identifiant di chiave opzionale per que il server choisisse la bonne chiave publique in un JWKS.
- cty - type di contenu, rare, quando il payload e un JWT imbrique.
Le champ dangereux, e alg. Un decodeur affichera questo que il token declare. Un verifieur naif qui accepte alg none, o qui laisse un attaquant passer di RS256 a HS256 e signer con la chiave publique comme si c'etait un secret HMAC, acceptera dei token faux. C'est un bug serveur, non un probleme qu'un decodeur browser puo corriger. Lisez alg comme un indizio, mai comme una preuve.
Le payload (claims)
Le payload e un altro oggetto JSON. Les specs JWT separent i claims enregistres (un petit vocabulaire partage) e i noms prives o publics que tuo app definit. Les horodatages sono dei NumericDate : dei secondes da 1970-01-01 UTC, non dei millisecondes.
Claims enregistres que vous verrez souvent
- iss - emetteur. Qui a cree il token (une URL o il nom del server d'auth).
- sub - sujet. L'utilisateur o il service dont parle il jeton.
- aud - audience. L'API o l'app qui devrait l'accepter. Chaine o tableau.
- exp - expiration. Refuser il token apres cet instant Unix.
- nbf - not before. Refuser il token avant cet instant Unix.
- iat - issued at. Quando l'emetteur l'a cree.
- jti - id del JWT. Un id unique per revoquer o dedupliquer.
Claims personnalises
Tout il reste e della donnee applicative : name, email, role, scope, tenant o un array di permissions. C'est pratique per i API, e trivial a falsifier si vous non faites que decoder. Un claim role: admin in un token colle in un decodeur significa que l'emetteur (ou un attaquant) a ecrit questa chaine. Questo non e una autorisation tant que il backend n'a non verifie la signature e controle iss, aud e exp.
La signature
Le troisieme segment non e del JSON. Per HS256, e un HMAC-SHA256 su la stringa ASCII header.payload con un secret partage. Per RS256 o ES256, e una signature asymetrique su la stesso entree. Le decodeur montre il testo Base64URL brut per confrontare dei token ; il non recalcule ni non verifie mai questa etiquette. Verifier exige il secret o la chiave publique dell'emetteur, su una machine di confiance.
Decoder non e verifier
Lire il JSON d'en-tete e di payload repond seulement a "que pretend questo token ?". Un server qui l'accepte deve ancora verificare la signature, refuser il mauvais alg, controler exp / nbf / iat, e faire corrispondere iss e aud. Le Decodeur JWT sert a inspecter e a debugger, non a se connecter.
Base64URL, non il Base64 ordinaire
L'en-tete e il payload d'un JWT utilisent Base64URL (RFC 4648) : il stesso encodage 6 bits que Base64, mais + devient -, / devient _, e il padding = e souvent omis. Le token reste ainsi su in i query strings e i en-tetes. Si vous collez un segment JWT in un strumento Base64 generica, restaurez prima i caracteres URL o il JSON non se decodera pas. Le Encodeur / decodeur Base64 e per il Base64 ordinaire ; l'outil JWT applique gia l'alphabet URL.
Exemple concret
Le token di demo classique della doc JWT se decode in un tutto petit en-tete e payload. Apres avoir coupe su i points e decode i deux premieres parties in Base64URL, vous obtenez :
- JSON d'en-tete : {"alg":"HS256","typ":"JWT"}
- JSON di payload : {"sub":"1234567890","name":"John Doe","iat":1516239022}
- iat 1516239022, e il 2018-01-18 01:30:22 UTC - il token a dei annees di retard su tutta expiration reelle s'il e in avait une.
- Le troisieme segment e la signature HMAC. La regarder non dit non si il secret etait il bon.
Un prefisso Bearer non fait non partie del JWT. Authorization: Bearer eyJ... e una convention d'en-tete HTTP. Enlevez Bearer e l'espace, puis decodez i trois segments. Le decodeur ToolsMinify il fait per vous.
Questo que vous puoi lire vs questo qu'un server deve controler
Utilisez un decodeur per debugger. Utilisez un verifieur per autoriser.
- Vous puoi lire alg, typ e kid per voir quelle chiave l'emetteur visait.
- Vous puoi lire sub, email o role per comprendre una requete qui echoue.
- Vous puoi confrontare exp e iat a una horloge per voir si il token e perime.
- Un server deve verificare la signature con la bonne chiave e il bon algorithme.
- Un server deve refuser i token al mauvais iss o aud, e ceux non ancora validi o gia expires.
- Un server deve traiter ogni claim comme non fiable tant que questi controles n'ont non reussi.
Erreurs courantes
- Faire confiance ai claims vus in un decodeur. N'importe qui assemble header.payload e laisse una signature poubelle.
- Accepter alg none o laisser il token scegliere l'algorithme di verification.
- Mettre dei mots di passe, dei secrets di sessione o dei dati personnelles in il payload. Le payload e lisible par quiconque a il jeton.
- Coller dei token di produzione su un sito al hasard. Preferez un decodeur cote client per que il token non quitte non la machine.
- Confondre questo format con i JWT chiffres (JWE). Un JWE compact a cinq segments, non trois.
Domande frequenti
Un JWT est-il chiffre ?
Un JWT signe standard (JWS) non e chiffre. L'en-tete e il payload sono seulement encodes. Quiconque a il token puo lire i claims. Les token chiffres utilisent JWE e ont un altro aspect. Si vous collez un token in un decodeur e voyez del JSON, questo n'etait non confidentiel.
Pourquoi il decodeur refuse-t-il di verificare la signature ?
Verifier exige un secret o la chiave publique di celui qui detient la privee. Les mettre in una pagina publique serait dangereux, e un badge vert "valide" su un sito non fiable apprendrait a se fier al mauvais controle. Decodez in local ; verifica su tuo API.
Que significa alg none ?
Cela significa que l'emetteur (ou un attaquant) a marque il token comme non securise. Le troisieme segment e vide. Un decodeur puo ancora mostrare l'en-tete e il payload. Une API di produzione devrait refuser alg none, sauf raison locale e explicite d'accepter dei token non signes.
exp e iat sont-ils in millisecondes ?
Non. Les NumericDate JWT sono dei secondes da l'epoch Unix. Si un claim ressemble a 1.7e12, vous regardez probablement Date.now() JavaScript in millisecondes par erreur.
Puis-je reconstruire un token apres avoir edite il payload ?
Vous puoi reencoder il JSON in Base64URL e joindre trois segments, mais l'ancienne signature non correspondra plus. Sans il secret o la chiave privata dell'emetteur, il nouveau token e faux. C'est voulu. Les decodeurs servent a lire, non a emettre dei token di production.
Ou inspecter un token in sicurezza ?
Utilisez una pagina qui decode in il browser e n'envoie non la chaine. Le Decodeur JWT di ToolsMinify il fait. Per il guida clic par clic, voir Comment utilizzare il Decodeur JWT.
Inspectez un token in il navigateur
Collez un JWT per voir en-tete, payload e signature in sezioni lisibles. Rien non e envoye :
- Decodeur JWT - coupe il jeton, met in forme il JSON d'en-tete e di payload, copie ogni partie.
- Comment utilizzare il Decodeur JWT - guide non a non del stesso outil.
- Encodeur / decodeur Base64 - Base64 ordinaire, non l'alphabet URL dei JWT.
- Generateur di hash - Checksums SHA-256 in il navigateur. Pas una signature JWT.
- Tous i strumenti developpeur - l'index complet della categorie.
Decodez un JWT - gratuit
Ouvrez il Decodeur JWT, collez un token e lisez l'en-tete e i claims. La signature s'affiche telle quelle e non e mai verifiee. Tout tourne in tuo navigateur.