JWT decoderen: een JSON Web Token lezen en controleren
Wil je een JWT decoderen, plak dan het token: de tool laat zien wat er in een JSON Web Token zit – header, payload en handtekening, met uitgever, geldigheid en verlooptijd in gewone taal. Met het secret of de publieke sleutel controleert hij zelfs de handtekening. Het token verlaat je browser niet.
Bron: §§ 2, 4.1 (Claims, NumericDate), IETF RFC 7519 – JSON Web Token (JWT). Bijgewerkt: .
Zo wordt het berekend
Een JSON Web Token (JWT) vervoert bewerkingen (claims) tussen twee partijen – meestal na het inloggen, als bewijs dat “deze gebruiker is ingelogd”. Het bestaat uit drie delen gescheiden door punten: header.payload.handtekening (RFC 7519, RFC 7515).
Een JWT decoderen – zo werkt het
- Plak het token in het bovenste veld (met of zonder “Bearer”).
- Header en payload verschijnen meteen als leesbare JSON, met daaronder verlooptijd en uitgever.
- Optioneel: voer de sleutel in bij “Secret of publieke sleutel” en de tool controleert de handtekening.
Wat er in een token zit
- Header: het algoritme (
alg, bijv. HS256 of RS256) en het type (typ). - Payload: de claims. Geregistreerd zijn onder meer
iss(uitgever),sub(onderwerp),aud(doelgroep),exp(verloopt),nbf(niet vóór),iat(uitgegeven op) enjti(ID). Tijden zijn seconden sinds 1970; de tool toont ze als datum in UTC. - Handtekening: beschermt tegen wijziging als de ontvanger haar met de juiste sleutel controleert.
Belangrijk: lezen is niet controleren
Header en payload zijn alleen base64url-gecodeerd, niet versleuteld. Wie een token ziet, kan het lezen – wachtwoorden of andere geheimen horen er niet in. Zonder handtekeningcontrole bewijst de inhoud niets, want iedereen kan haar wijzigen. De controle hier werkt met een HMAC-secret (HS256/384/512) en met een publieke sleutel (RS, PS, ES); een token met alg: none is niet ondertekend.
Bescherming tegen algorithm confusion
Een bekende aanval geeft de server een token met alg: HS256, ondertekend met de publieke sleutel als secret. De tool weigert daarom de controle als een publieke of private sleutel als HS-secret wordt ingevoerd (RFC 8725 raadt aan het algoritme nooit alleen uit het token te halen).
Grenzen
- Versleutelde tokens (JWE, vijf delen) zijn zonder sleutel niet te lezen; alleen de header wordt getoond.
- Controle voor EdDSA en certificaten zit er niet in. Of een token geldt voor jouw toepassing, hangt af van uitgever, doelgroep en verlooptijd, die je server zelf moet controleren.
- Productietokens horen alleen op apparaten die je vertrouwt. Hier wordt niets verstuurd of opgeslagen, maar een verlopen of test-token is de veiligere keuze.
Veelgestelde vragen
Wat is een JWT?
Een JSON Web Token is een compacte, URL-veilige tekenreeks van drie delen (header, payload, handtekening). Hij draagt claims zoals de gebruikers-ID of verlooptijd en dient vaak als toegangsbewijs na het inloggen.
Kan iedereen de inhoud van een JWT lezen?
Ja. Header en payload zijn alleen base64url-gecodeerd, niet versleuteld. Alleen de handtekening beschermt tegen wijziging, niet tegen lezen. Stop dus geen geheimen in een JWT.
Hoe controleer ik de handtekening van een JWT?
Voer bij “Secret of publieke sleutel” het secret in voor HS256/384/512, of de publieke sleutel als PEM of JWK voor RS256, PS256 of ES256. Het resultaat verschijnt bij “Handtekening”.
Is het veilig om mijn token in een online decoder te plakken?
Deze decoder werkt volledig in je browser en verstuurt niets. Toch is een geldig token een toegangsbewijs. Gebruik waar mogelijk test-tokens of al verlopen tokens.
Wat betekenen exp, iat en nbf?
exp is het moment waarop het token verloopt, iat het moment van uitgifte en nbf het moment vanaf wanneer het geldt. Alle drie zijn seconden sinds 1 januari 1970 UTC.
Waarom meldt de tool “niet gecontroleerd”?
Zonder sleutel valt er niets om de handtekening aan te toetsen, dus de inhoud wordt alleen gelezen. Ook bij niet-ondersteunde algoritmen of ongeschikte sleutelformaten blijft de controle achterwege.
Bronnen en wettelijke basis
- §§ 2, 4.1 (Claims, NumericDate): IETF RFC 7519 – JSON Web Token (JWT)
- §§ 3, 7.1, Anhang A.1 (Testbeispiel HS256): IETF RFC 7515 – JSON Web Signature (JWS)
- § 3 (HS, RS, ES, PS): IETF RFC 7518 – JSON Web Algorithms (JWA)
- §§ 2.1, 3.1 (Algorithmus-Verwechslung, Algorithmus pruefen): IETF RFC 8725 – JSON Web Token Best Current Practices
- W3C Web Cryptography API (SubtleCrypto.verify)
Bijgewerkt op: · Redactioneel beleid
Vergelijkbare tools
- Base64 encoderen en decoderenBase64 en Base64url encoderen en decoderen met correcte UTF-8, plus URL encode/decode (percent-encoding). Duidelijke foutmeldingen, lokaal in je browser.
- Hash generator: SHA-256, SHA-512, SHA-1, MD5Bereken SHA-256-, SHA-384-, SHA-512-, SHA-1- en MD5-hashes van tekst of een bestand en controleer een checksum – lokaal in je browser, geen upload, gratis.
- JSON formatteren, valideren en minifiërenValideer je JSON volgens RFC 8259: foutmelding met exacte regel, kolom en duidelijke uitleg. Opmaken, minifiëren en sleutels sorteren, lokaal in de browser.
- Unix-tijdstempelconverterZet een Unix-tijdstempel om in een datum en omgekeerd: seconden, milliseconden, micro- en nanoseconden herkend; UTC, lokale tijd, ISO 8601 en meer.
- UUID generator: UUID v4 en v7 maken en controlerenMaak online UUID’s: versie 4 (willekeurig) of versie 7 (op tijd gesorteerd), tot 1.000 tegelijk. Controleer een UUID en lees versie, variant en tijdstempel.
- Wachtwoord generatorMaak sterke willekeurige wachtwoorden en makkelijk te onthouden wachtzinnen met entropie in bits, gewoon in je browser: er wordt niets verstuurd of bewaard.
- Wat is mijn IP-adres?Toont direct je publieke IP-adres, detecteert IPv4 of IPv6 en legt het verschil uit. Gratis, geen registratie – je IP-adres wordt nooit opgeslagen.
- Redirect checker: bekijk de hele redirectketenDeze redirect checker toont elke stap van een URL met statuscode (301, 302, 307, 308), doel en tijd – en waarschuwt voor ketens, lussen en HTTPS-fouten.
- Markdown tabel makenMarkdown tabel maken: plak gegevens uit Excel, Google Sheets of CSV en kopieer een uitgelijnde Markdown-, HTML- of LaTeX-tabel, lokaal in je browser.