Hoe JWT-tokens te decoderen en te inspecteren
JSON Web Tokens (JWT) zijn de meest voorkomende manier om authenticatie te beheren in moderne webapplicaties. Wanneer er iets misgaat aan de auth-kant — een gebruiker wordt zonder reden uitgelogd, machtigingen zijn verkeerd, of een API geeft 401 terug — is het decoderen van het JWT vaak de eerste debug-stap.
Wat een JWT bevat
Een JWT heeft drie delen gescheiden door punten:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U
Header — bevat het algoritme (HS256, RS256, etc.) en het tokentype.
{"alg": "HS256", "typ": "JWT"}
Payload — bevat claims (beweringen) over de gebruiker en het token.
{"sub": "1234567890", "name": "Alice", "exp": 1700000000}
Handtekening — een cryptografische vingerafdruk die garandeert dat het token niet is gewijzigd. U kunt deze niet lezen zonder de ondertekeningssleutel.
Veelvoorkomende JWT-claims
| Claim | Volledige naam | Inhoud |
|---|---|---|
sub |
Subject | Gebruikers-ID of -identificator |
exp |
Expiration | Unix-tijdstempel van vervaldatum |
iat |
Issued At | Unix-tijdstempel van creatie |
iss |
Issuer | Wie het token heeft gemaakt (uw auth-server) |
aud |
Audience | Voor wie het token is bestemd |
nbf |
Not Before | Het token is niet geldig voor deze datum |
jti |
JWT ID | Unieke identificator van het token |
Hoe een JWT te decoderen
- Plak uw token — voer het volledige JWT (formaat header.payload.handtekening) in de decoder in.
- Bekijk de gedecodeerde secties — de tool toont de header (algoritme), de payload (claims) en de handtekening in de vorm van geformatteerde JSON.
- Controleer de claims — onderzoek de vervaldatum, uitgever, subject en alle aangepaste claims.
Debuggen met JWT's
Verlopen token? Controleer de claim exp. Converteer de Unix-tijdstempel naar een leesbare datum. Als deze verstreken is, is het token verlopen en moet het worden vernieuwd.
Verkeerde machtigingen? Zoek naar role- of scope-claims in de payload. Ze variëren afhankelijk van de implementaties maar lijken vaak op "role": "admin" of "scope": "read write".
Gebruikersidentiteitsprobleem? De claim sub identificeert de gebruiker. Controleer of deze overeenkomt met de verwachte ID.
Token geweigerd? Controleer de claim aud (audience). Als de API een specifieke audience verwacht en het token een andere heeft, zal het worden afgewezen.
Belangrijke beveiligingsopmerkingen
- JWT's zijn niet versleuteld — iedereen kan de payload decoderen. Plaats geen wachtwoorden, API-sleutels of andere geheimen in een JWT.
- Verifieer altijd handtekeningen aan de serverzijde — een decoder toont u wat het token claimt, maar alleen handtekeningverificatie bewijst dat het niet is gewijzigd.
- Controleer de vervaldatum — verlopen tokens moeten altijd worden afgewezen. Als uw applicatie verlopen tokens accepteert, is dat een beveiligingslek.
Veelgestelde vragen
Kan ik een JWT-handtekening verifiëren met een decoder?
Nee. Handtekeningverificatie vereist het ondertekeningsgeheim of de openbare sleutel, bewaard op uw server. Een decoder toont u wat er in het token staat, maar de cryptografische verificatie moet plaatsvinden op uw backend. Vertrouw nooit een ongeverifieerd JWT in productie.
Is het veilig om een JWT in een online tool te plakken?
Ja, wanneer de tool in uw browser draait. Browser-decoders verwerken het token lokaal — niets wordt naar een server verzonden. Vermijd tools die netwerkaanvragen doen met uw token.
Wat is de exp-claim?
De exp-claim (expiration) is een Unix-tijdstempel die aangeeft wanneer het token verloopt. Na deze datum moet het token worden afgewezen. Controleer deze claim altijd om authenticatieproblemen te debuggen.
Kunnen JWT's worden versleuteld?
Standaard JWT's (JWS) zijn ondertekend maar niet versleuteld — iedereen kan de payload decoderen. JWE-tokens (JSON Web Encryption) zijn versleuteld, maar minder gangbaar. Plaats nooit gevoelige gegevens (wachtwoorden, geheimen) in een standaard JWT-payload.