Wat is deze tool?
Een JWT (JSON Web Token) is een compacte, URL-veilige string die gebruikt wordt om claims tussen twee partijen door te geven — meestal als authenticatietoken na het inloggen. Hij bestaat uit drie door punten gescheiden delen: een header (algoritme en tokentype), een payload (de eigenlijke claims — gebruikers-ID, rollen, verlooptijd, enz.) en een handtekening (waarmee de server verifieert dat de token niet is aangepast).
De header en payload zijn gewoon Base64URL-gecodeerde JSON — niet versleuteld — dus iedereen kan ze decoderen en lezen zonder geheime sleutel. Alleen de handtekening vereist een geheim om te verifiëren. Precies dat doet deze tool: de leesbare delen decoderen en tonen als geformatteerde JSON, zonder te proberen de handtekening te verifiëren.
JWT's zijn gestandaardiseerd in RFC 7519, met de handtekeninglaag (JWS) apart gedefinieerd in RFC 7515 — handige referenties als je de officiële lijst met geregistreerde claims zoals exp, iat, sub en aud nodig hebt.
Waarom gebruiken?
- Direct leesbare header en payload, geformatteerd als JSON — niet meer handmatig de string opsplitsen en Base64 decoderen.
- Automatische verloopcontrole: als de payload een "exp"-claim heeft, wordt die omgezet naar een leesbare datum en gemarkeerd als verlopen of geldig.
- Header en payload apart kopiëren met één klik.
- 100% client-side — de token wordt lokaal gedecodeerd en nooit verzonden, veilig te gebruiken zelfs met tokens uit een productiesysteem.
- Geen handtekeningverificatie uitgevoerd of geclaimd — dit is een debug-/inspectietool, geen validator.
Hoe te gebruiken
- Plak je JWT in het vak (de volledige string, inclusief alle drie de door punten gescheiden delen).
- De header en payload worden automatisch gedecodeerd terwijl je typt.
- Bekijk de verloopregel als de token een "exp"-claim heeft — die toont de exacte datum en of de token verlopen is.
- Klik op "Copy" onder een van beide vakken om dat onderdeel als JSON te kopiëren.
Voorbeeld
Invoer
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQUitvoer
Header: {"alg": "HS256"}
Payload: {"sub": "1234", "name": "John Doe", "exp": 1700000000}De handtekening (derde deel) wordt nooit gedecodeerd of gecontroleerd — het is een ondoorzichtige hash die server-side wordt gebruikt om echtheid te verifiëren.
Praktische tips
- "Invalid token"-fouten debuggen: decodeer eerst de payload om de "exp"-claim te controleren — een verlopen token is de meest voorkomende oorzaak, en dat is niet altijd duidelijk uit de foutmelding zelf.
- Controleren wat de token van een externe API daadwerkelijk bevat: veel API's geven een ondoorzichtig ogende JWT terug als accesstoken — decodeer die hier om de scopes, gebruikers-ID of verlooptijd te zien die je integratie daadwerkelijk ontvangt.
- Ga er nooit van uit dat een JWT versleuteld is: als je tijdens ontwikkeling gevoelige data (e-mail, interne ID's) ziet in een gedecodeerde payload, is dat een signaal om die data server-side te verplaatsen in plaats van erop te vertrouwen dat de client die niet leest.
Veelvoorkomende claims in een payload
| Claim | Betekenis |
|---|---|
| sub | Subject — meestal de gebruikers-ID waar de token voor staat |
| exp | Verlooptijd (Unix-timestamp) — token is ongeldig na dit tijdstip |
| iat | Issued at — wanneer de token is aangemaakt |
| iss | Issuer — welke service/server de token heeft uitgegeven |
| aud | Audience — voor welke service de token bedoeld is |
| role / roles / scope | Aangepaste claims — rechten of rollen toegekend aan de gebruiker (geen onderdeel van de JWT-standaard, maar extreem gangbaar) |
Veelgestelde vragen
Verifieert deze tool de handtekening van de JWT?
Nee. Het verifiëren van een handtekening vereist de geheime of publieke sleutel waarmee de token is ondertekend, die alleen de uitgevende server heeft. Deze tool decodeert alleen de header en payload — de leesbare delen — zodat je claims en verlooptijd kunt inspecteren zonder enige sleutel nodig te hebben.
Is het veilig om hier een echte productie-JWT te plakken?
Decoderen gebeurt volledig in je browser via JavaScript — de token wordt nooit naar een server gestuurd, ook niet naar de onze. Behandel tokens desondanks als wachtwoorden: plak ze niet in tools die je niet vertrouwt, en deel geen screenshots van gedecodeerde tokens met gevoelige claims.
Waarom kan iedereen de payload van mijn JWT lezen zonder wachtwoord?
Dat is met opzet zo — de header en payload van een JWT zijn Base64URL-gecodeerd, niet versleuteld. Codering is geen beveiliging; het maakt de JSON alleen URL-veilig voor verzending. Zet nooit geheimen (wachtwoorden, creditcardnummers) rechtstreeks in een JWT-payload — ga ervan uit dat iedereen met de token de inhoud kan lezen.
Wat betekent de "exp"-claim en waarom is die belangrijk?
"exp" is het verlooptijdstip van de token, als Unix-timestamp (seconden sinds 1970). Servers weigeren een JWT zodra dit tijdstip verstreken is, waardoor de client opnieuw moet inloggen. Deze tool zet dit om naar een leesbare datum en markeert of hij al verlopen is, wat handig is bij het debuggen van "waarom werd ik uitgelogd"-problemen.
Mijn token toont een JSON-parsefout — waarom?
Ofwel is de string geen geldige JWT (moet uit precies drie door punten gescheiden delen bestaan), of hij is afgekapt of gewijzigd — een veelvoorkomende oorzaak is een token die per ongeluk over meerdere regels is verdeeld of ontbrekende slottekens bij het kopiëren.