Een JWT Decoderen en Claims Veilig Inspecteren
Snel antwoord
Een JWT is drie Base64URL-tekenreeksen verbonden door punten: header.payload.signature. Decodeer de header en payload met Base64URL-decodering om claims te inspecteren —maar decoderen leest alleen data, het verifieert niet authenticiteit. Verifieer altijd de signature op de server. Gebruik onze JWT Decoder om tokens in je browser te inspecteren.
Invoering
Een JSON Web Token (JWT, RFC 7519) is een compact, URL-safe token-formaat gebruikt voor authenticatie en autorisatie. Het heeft drie Base64URL-gecodeerde delen gescheiden door punten: header.payload.signature. De header beschrijft het algoritme, de payload bevat claims (user id, roles, expiry) en de signature bewijst dat het token door een vertrouwde partij is uitgegeven. Cruciaal: de header en payload zijn gecodeerd, niet versleuteld —iedereen kan ze lezen.
Stap voor stap
-
Verdeel het token in drie delen
Een JWT ziet eruit als xxxxx.yyyyy.zzzzz. Splits het puntteken op om de koptekst (deel 0), de payload (deel 1) en de handtekening (deel 2) te krijgen. Als er niet precies drie delen zijn, is het token verkeerd gevormd.
-
Base64URL-decodeert de header
De header is een Base64URL-gecodeerd JSON-object zoals {"alg":HS256", "typ":JWT"}. Base64URL gebruikt - en _ in plaats van + en / en laat opvulling weg. Decodeer het en JSON.parse om het algoritme en het type te lezen. Onze JWT Decoder doet dit automatisch.
-
Base64URL-decodeert de payload (claims)
De lading is een JSON voorwerp van claims. Geregistreerde claims zijn onder meer iss (uitgever), sub (onderwerp), aud (publiek), exp (vervaldatum), nbf (not-before), iat (uitgegeven op) en jti (token-ID). Privéclaims zijn toepassingsspecifiek (bijvoorbeeld rol, e-mail). Decodeer en inspecteer, maar vertrouw niet totdat het is geverifieerd.
-
Controleer de vervaldatum en not-before-claims
exp en nbf zijn Unix-tijdstempels (seconden). Als de huidige tijd voorbij exp is, is het token verlopen en moet het worden afgewezen. Als de huidige tijd vóór nbf ligt, is het token nog niet geldig. Controleer deze client-side op UX, maar dwing ze server-side af voor de veiligheid.
-
Controleer de handtekening op de server (nooit client-side)
De handtekening is HMAC-SHA256(secret, header.payload) voor HS256, of RSA/ECDSA handtekening voor RS256/ES256. Voor verificatie is de geheime of publieke sleutel vereist, die nooit de browser mag bereiken. Gebruik een bibliotheek zoals jsonwebtoken (Node) of jose om te verifiëren – schrijf nooit uw eigen crypto.
Voorbeelden
Een typische JWT (drie delen)
Invoer: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpmeJf36POk6yJV_adQssw5c
Uitvoer: Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John Doe","iat":1516239022}
Gedecodeerde lading met standaardclaims
Invoer: Payload van een echt authenticatietoken
Uitvoer: {"sub":"user-42","iss":"freeonlinetoolsgo.com","exp":1767229200,"iat":1767225600,"role":"admin"}
Detectie van verlopen tokens
Invoer: exp: 1609459200 (01-01-2021) gecontroleerd op 28-08-2026
Uitvoer: Token is expired —current time (1767225600) > exp (1609459200). Reject and prompt re-login.
Veelvoorkomende problemen
- Decodering behandelen als verifiëren: iedereen kan een JWT maken met eventuele claims en een valse handtekening. Decodering leest de lading, maar bewijst niets. Verifieer altijd de handtekening met de geheime/publieke sleutel op de server voordat u claims vertrouwt.
- Met behulp van het 'none'-algoritme: de JWT-specificatie staat alg: none toe voor onbeveiligde tokens. Als uw verificateur alg: geen accepteert, kan een aanvaller tokens vervalsen. Configureer uw bibliotheek om geen enkele te weigeren en de verwachte algoritmen op de witte lijst te zetten.
- JWT's opslaan in localStorage: XSS kan localStorage lezen en tokens exfiltreren. Geef de voorkeur aan httpOnly, Secure, SameSite=Strict cookies voor sessietokens, of kortstondige in-memory tokens met een vernieuwingstokencookie.
- Exp/aud/iss niet gecontroleerd: een gestolen token is geldig totdat deze verloopt. Controleer altijd exp (vervaldatum), aud (beoogde doelgroep) en iss (uitgever) bij elk verzoek om herhaling van tokens tussen services te voorkomen.
Tips
- Gebruik toegangstokens met een korte levensduur (15 minuten) plus vernieuwingstokens met een lange levensduur. Dit beperkt de periode als een toegangstoken wordt gestolen.
- Geef de voorkeur aan RS256 (asymmetrisch) boven HS256 (symmetrisch) wanneer meerdere services tokens verifiëren: elke service krijgt de openbare sleutel en alleen de uitgever heeft de privésleutel.
- Gebruik onze JWT-decoder tijdens de ontwikkeling om te inspecteren wat de server uitgeeft: deze toont de gedecodeerde header, payload en een voor mensen leesbare claimsamenvatting zonder het token ergens heen te sturen.
- Plaats nooit gevoelige gegevens (wachtwoorden, PII) in een JWT-payload: deze is Base64-gecodeerd, niet gecodeerd, en iedereen die het token onderschept, kan elke claim lezen.