Afkod en JSON Web Token (JWT)
- Dashboard
- Dokumentation
- API
Hvad er et JWT (JSON Web Token)?
Et JSON Web Token, forkortet til JWT (udtales "jot"), er et format kompakt defineret af RFC 7519, der tillader transport af en række krav (krav) mellem to parter. JWT, eller JWT-token, er det dominerende format i dag at formidle en autentificeret identitet i en HTTP API. En JWT vises som en ASCII-streng sammensat af tre segmenter adskilt af punkter:
header.payload.signature
Hvert segment er kodet i Base64URL, en variant af Base64 uden polstring
= og som erstatter + med - og / med _
så det kan flyde gennem en URL- eller HTTP-header uden yderligere escape.
Vigtigt: En JWT er IKKE krypteret. Standard JWT (JWS) formatet er simpelthen underskrevet: signaturen garanterer indholdets integritet, men giver ingen fortrolighed. Enhver kan afkode en JWT-nyttelast med en simpel omvendt Base64URL, som dette online jwt-afkodningsværktøj gør.
Anatomi af en JWT
Et json-webtoken består af tre meget adskilte dele, der hver spiller en bestemt rolle i godkendelsesmekanismen:
1. Overskrift
Headeren er et JSON-objekt, der beskriver, hvordan tokenet er signeret. Den indeholder mindst:
alg(algoritme): den anvendte signaturalgoritme. Typiske værdier:HS256,RS256,ES256,EdDSA.typ(type): typen af token, næsten altid"JWT".kid(nøgle-id): valgfrit, identificerer hvilken nøgle der skal bruges for at bekræfte signaturen. Praktisk i nærværelse af et roterende sæt nøgler (JWKS).
2. Nyttelast
Nyttelasten indeholder kravene, det vil sige de krav, som udstederen fremsætter om brugeren eller sessionen. RFC 7519 definerer syv standardkrav (registrerede krav):
iss(udsteder): hvem udstedte f.eks. tokenet"https://accounts.google.com".sub(emne): hvem ejer tokenet, i praksis bruger-id'et.aud(publikum): hvem tokenet er beregnet til. Undgå et token udstedt til API A accepteres af API B.exp(udløbstid): Unix-tidsstempel, hvorefter tokenet er ikke længere gyldig.nbf(ikke før): tidsstempel, før hvilket tokenet ikke er stadig aktiv.iat(udstedt på): tidsstempel for tokenudstedelse.jti(JWT ID): unik identifikator for tokenet, der bruges til tilbagekaldelse og forebyggelse af genafspilning.
Til disse standardkrav tilføjes generelt brugerdefinerede krav, der er specifikke for
applikationen (roller, omfang, lejer-id, e-mail,
tilladelser...).
3. Signatur
Signaturen er et kryptografisk kondensat beregnet på
base64url(header) + "." + base64url(nyttelast) ved hjælp af en nøgle. Det er hende, der beviser
at ingen har ændret headeren eller nyttelasten siden udsendelsen. De mest almindelige algoritmer:
- HS256 / HS384 / HS512: HMAC-SHA symmetrisk signatur. En fælles hemmelig nøgle mellem udsteder og verifikator. Enkelt, men uegnet, når der er mere end én forbruger.
- RS256 / RS384 / RS512: asymmetrisk RSA-signatur. Senderen skriver under med sin nøgle privat, verificerer enhver forbruger med den tilsvarende offentlige nøgle. De facto standard til OAuth2 og OpenID Connect.
- ES256 / ES384 / ES512: ECDSA asymmetrisk signatur. Samme egenskaber som RS256 men med meget kortere taster og signaturer.
- EdDSA (Ed25519): moderne, hurtig og kompakt asymmetrisk signatur.
Endnu en gang: signaturen beskytter integritet, ikke fortrolighed. Den nyttelast forbliver læsbar af alle, der ejer tokenet.
Hvorfor afkode en JWT?
Operationen jwt token decode opfylder flere konkrete behov for en udvikler eller en sikkerhedsingeniør:
- Authentication Debug: din API returnerer en 401 eller 403, du vil se
hvad der faktisk er i nyttelasten (
sub,scope,roller,exp) i stedet for at gætte. - Tjek krav: Bekræft, at et token indeholder kravet
forventet (f.eks.
tenant_idellertilladelser) før søgning andetsteds i godkendelseskæden. - Læs udløb: konverter tidsstempel
exptil menneskelig dato for bekræfte, at et token er udløbet, eller tværtimod, at det stadig skal være gyldigt. - Sikkerhedsrevision: sikring af, at en tredjepartstjeneste ikke lækker information følsomme i nyttelasten (e-mails, interne identifikatorer, personlige data).
- Træning og forståelse: se konkret hvad en jsonwebtoken kommer ud af en OAuth-udbyder (Google, Auth0, Keycloak, AWS Cognito) for forstå mekanikken uden at dykke ned i dokumenterne.
- Udforskning af offentlige tokens: undersøg en JWT fundet i logfiler, i en cookie eller i en aflytbar OAuth-udveksling.
Dekoder vs Verifier: den kritiske skelnen
De to operationer ligner hinanden, men de har intet at gøre med hensyn til sikkerhedsgarantier:
- Afkodning af en JWT består i at opdele strengen på
.og anvende en omvendt Base64URL på de første to segmenter. Det er let at læse, inden for rækkevidde af ethvert tre-linjers script. Ingen signaturbekræftelse er ikke færdig. - Bekræftelse af en JWT består i at genberegne signaturen fra overskriften, nyttelast og en nøgle, hvorefter resultatet sammenlignes med signaturen i tokenet. Det er som garanterer, at tokenet ikke er blevet manipuleret med.
Praktisk konklusion: afkodning er ikke værd at stole på. Så længe underskriften ikke er blevet verificeret med den korrekte nøgle, kan indholdet af nyttelasten være fuldstændig falsk. For tillidsfase, brug vores JWT Verifier.
Hvordan man bruger det
- Få JWT'en til at inspicere, for eksempel fra en header
Autorisation: Bærer, fra en sessionscookie, fralocalStoragefra browseren eller fra en applikationslog. - Indsæt hele strengen i inputfeltet. De tre segmenter skal forblive adskilt af point.
- Værktøjet viser straks headeren afkodet til formateret JSON, med algoritmen og typen.
- nyttelasten afkodes og vises derefter. Du ser alle påstandene der standard og brugerdefineret.
- Værktøjet angiver også signaturoplysningerne (erklæret algoritme, længde), uden at kontrollere det.
- For at bekræfte, at tokenet ikke er blevet manipuleret, skal du skifte til vores JWT Verifier med den forventede offentlige nøgle eller hemmelighed.
Al afkodning sker i din browser i JavaScript: dit token sendes aldrig til vores servere.
JWT og sikkerhed: faldgruber at undgå
Gem ALDRIG følsomme data i nyttelasten af en signeret JWT.
Adgangskoder, kreditkortnumre, medicinske data, API-hemmeligheder, identifikatorer kritiske interne: alt i nyttelasten erlæselig af alle ejer tokenet, inklusive brugeren selv via udviklerværktøjerne af hans browser. Signaturen maskerer ikke noget, den beviser kun, at udstederen faktisk er det hvem han hævder at være.
Et par gyldne regler for korrekt brug af JWT i produktionen:
- Kontroller altid signaturen på serversiden, før du giver nogen rettigheder. Vores JWT Verifier illustrerer præcis denne operation.
- Foretrækker RS256 eller ES256 frem for HS256 til offentlige API'er. Signaturen asymmetrisk undgår at dele en hemmelighed mellem senderen og hver forbruger.
- Respekter altid
exp-påstanden. En JWT uden udløb eller med udånding for langt er en tidsindstillet bombe i tilfælde af en lækage. - Valider
issogaudpå serversiden for at forhindre en legitim token udstedt til en anden tjeneste accepteres ved en fejl. - Afvis
alg: "ingen"på bekræftelsessiden. Dette er en klassisk fejl som tillader en angriber at forfalske enhver nyttelast. - Hold levetiden kort (f.eks. 15 minutter) og par med en Opdater token længere, men kan tilbagekaldes på serversiden.
Eksempel på afkodet JWT-token
Her er en typisk JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiSm9obi IsImlhdCI6MTUxNjIzOTAyMn0.jrU9j8LZcRK2_BZjqXjU7lEpJbkqmXfTQIu9vT45j-I
Når den er afkodet, er dens indhold her:
// Overskrift
{
"alg": "HS256",
"type": "JWT"
}
// Nyttelast
{
"sub": "123",
"name": "John",
"iat": 1516239022
}
// Signatur (binær, Base64URL-kodet)
HMACSHA256(
base64url(header) + "." + base64url(nyttelast),
hemmelighed
)
Hvor finder man en JWT at kopiere?
I praksis kommer en JWT til dekryptere (i betydningen afkodning) oftest fra en af disse steder:
- HTTP Cookie: Åbn udviklingsværktøjerne (F12), fanen
Applikation eller Lagring og derefter Cookies. Find en navngivet cookie
adgangstoken,jwt,sessioneller lignende. localStorage/sessionStorage: samme panel, Lokal lagerplads. Mange SPA'er gemmer deres token der under en nøgletokenellerauth.Autorisationoverskrift: Netværk fane, vælg en API-anmodning, læsAuthorization: Bearer-headeren. Kopier kun del efterBærer.- Serverlogfiler: en JWT vises nogle gange i logfilerne på en gateway eller en omvendt proxy (skal undgås i produktionen, men nyttig ved fejlretning).
Ofte stillede spørgsmål
Le JWT est-il chiffré ou en clair ?
Un JWT signé (format JWS) est seulement encodé en Base64URL, pas chiffré. Toute personne qui intercepte un token peut lire le payload en quelques secondes. Si vous devez transporter des données vraiment confidentielles dans le token, il faut utiliser le format JWE (JSON Web Encryption), qui ajoute une couche de chiffrement par-dessus la signature. En pratique, le JWE reste rare : on préfère ne pas mettre de données sensibles dans un jeton et conserver les informations critiques en base côté serveur.
Comment révoquer un JWT avant son expiration ?
C'est l'un des points faibles du JWT : par construction, le serveur n'a pas besoin de stocker
l'état du token, donc il ne sait pas non plus comment le marquer comme révoqué. Trois approches
existent. Liste de révocation : maintenir côté serveur la liste des
jti invalidés, et la consulter à chaque requête. Durées de vie courtes :
émettre des access tokens valides 5 à 15 minutes, et utiliser un refresh token révocable côté
serveur pour en générer de nouveaux. Rotation de clé de signature : invalider
toute une génération de tokens en changeant la clé. La deuxième approche est de loin la plus
répandue.
Quelle différence entre un JWT et une session classique ?
Une session classique stocke un identifiant opaque côté client (généralement dans un cookie) et conserve toutes les données associées (utilisateur, droits, expiration) en mémoire ou en base côté serveur. Un JWT, au contraire, transporte directement ces données dans le token signé. Avantage du JWT : le serveur n'a pas besoin de stocker de session, ce qui simplifie le scaling horizontal et l'architecture microservices. Inconvénients : la révocation est plus complexe, le token est plus volumineux à chaque requête, et la moindre fuite expose le payload.
Différence entre JWT, JWS et JWE ?
JWT (RFC 7519) est un format de jeton générique. Il peut être implémenté de deux manières concrètes : JWS (RFC 7515, JSON Web Signature) qui se contente de signer le payload, et JWE (RFC 7516, JSON Web Encryption) qui le chiffre. En pratique, quand on parle de "JWT" sans précision, on parle presque toujours d'un JWS : un token signé mais lisible par tous. Le JWE est utilisé dans les contextes où la confidentialité du payload est indispensable, par exemple dans certains scénarios OpenID Connect avancés.
Mon JWT n'est pas accepté par l'API, pourquoi ?
Les causes classiques sont, par ordre de fréquence : token expiré (vérifiez
le claim exp), signature invalide (clé secrète ou clé publique
ne correspond pas à celle utilisée par l'émetteur), mauvais aud
(le token a été émis pour un autre service), mauvais iss
(l'émetteur déclaré n'est pas celui attendu), algorithme refusé (l'API exige
par exemple RS256 et reçoit un HS256), horloges désynchronisées entre
l'émetteur et le vérificateur (joue sur exp et nbf). Décoder le
token avec cet outil permet déjà d'éliminer la moitié des hypothèses en lisant directement les
claims.
Comment générer un JWT ?
La plupart des langages disposent d'une bibliothèque dédiée : jsonwebtoken en
Node.js, PyJWT en Python, lcobucci/jwt ou
firebase/php-jwt en PHP, jjwt en Java, golang-jwt/jwt
en Go. Toutes prennent en entrée un objet payload, une clé et un algorithme, et retournent la
chaîne header.payload.signature prête à être envoyée. Il est fortement déconseillé
d'implémenter la génération à la main : la cryptographie comporte trop de pièges (comparaisons
non constantes, gestion incorrecte de alg: none, etc.).
Le decoder accepte-t-il un JWT expiré ?
Oui. Le decoder se contente d'afficher le contenu du token sans porter de jugement sur sa
validité temporelle. Il n'évalue ni exp, ni nbf, ni la signature.
C'est utile pour comprendre pourquoi un token a été rejeté par une API : on peut
comparer la valeur de exp à l'heure actuelle pour confirmer qu'il est bien
expiré.
Mon JWT est-il valide si le decoder l'affiche correctement ?
Non. L'affichage prouve uniquement que la chaîne est bien formée (trois segments séparés par des points, encodage Base64URL correct, JSON valide dans le header et le payload). Cela ne dit rien de l'authenticité du token. Un JWT entièrement falsifié peut s'afficher sans erreur dans un decoder, c'est précisément pour cela qu'on doit le passer à un verifier.
Anmodningseksempel
curl -X POST https://cdrn.fr/api/v1/tools/jwt-decoder/execute \
-H "Content-Type: application/json" \
-d '{"token":"..."}'
Inputskema
| Felt | Type | Påkrævet | Standard |
|---|---|---|---|
token |
text | ✓ | – |
Endpoints
GET https://cdrn.fr/api/v1/tools- lister alle tilgængelige værktøjerGET https://cdrn.fr/api/v1/tools/jwt-decoder- henter skemaet for dette værktøjPOST https://cdrn.fr/api/v1/tools/jwt-decoder/execute- udfører dette værktøj med et JSON-payload