JWT-decoder

Plak een JWT (drie met base64url gecodeerde delen, gescheiden door punten) en de decoder toont de header, payload en signatuur – gedecodeerd en netjes geformatteerd – samen met het gedetecteerde algoritme, de vervaltijd van het token in uw lokale tijd, en of nbf (not-before), iat (issued-at) en exp (expiry) consistent zijn. Optionele verificatie van de handtekening als u de geheime sleutel of de publieke sleutel hebt.

Hoe je een JWT decodeert

  1. 1

    Plak het token

    Drie base64url-strings gescheiden door `.` (header.payload.signatuur).

  2. 2

    Lees de gedecodeerde header

    Algoritme, type en sleutel-ID (`kid`): het algoritme geeft aan welk sleuteltype vereist is voor verificatie.

  3. 3

    Lees de payload

    Standaardclaims (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) plus eventuele aangepaste claims die uw applicatie uitgeeft.

  4. 4

    Verifieer (optioneel)

    Geef het HMAC-secret (voor HS256/384/512) of de openbare sleutel (voor RS256, ES256, etc.) op om te bevestigen dat de handtekening geldig is.

Anatomie van een JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Elk segment is gecodeerd met base64url (niet het standaard base64). De header is JSON zoals {"alg":"HS256","typ":"JWT"}, de payload is JSON zoals {"sub":"1234567890","name":"Alice","iat":1600000000} en de signatuur is de HMAC- of RSA-handtekening van header.payload.

Standaardclaims (RFC 7519)

Claim Naam Opmerkingen
iss Uitgever Wie het token heeft uitgegeven
sub Onderwerp Over wie het token gaat
aud Doelgroep Voor wie het token bedoeld is
exp Vervaltijd Unix-tijdstempel; wordt na deze tijd afgewezen
nbf Niet voor Unix-tijdstempel; wordt vóór deze tijd afgewezen
iat Uitgegeven op Unix-tijdstempel van het aanmaken van het token
jti JWT-ID Unieke identificator voor intrekkingslijsten

Ondersteunde algoritmen

alg-waarde Sleuteltype
HS256/HS384/HS512 Gedeelde HMAC-sleutel
RS256/RS384/RS512 Publieke RSA-sleutel
ES256/ES384 Publieke ECDSA-sleutel
PS256/PS384 Publieke RSA-PSS-sleutel
EdDSA / Ed25519 Edwards-kromme
none Vertrouw dit nooit, niet-ondertekende tokens

De valkuil alg: none

Vroege JWT-bibliotheken stonden "alg": "none"-tokens toe en accepteerden ze naïef als geldig. Doe altijd het volgende:

  • Plaats de algoritmen die uw applicatie accepteert op een witte lijst.
  • Wijs alg: none onvoorwaardelijk af.
  • Wijs alg: HS256 af wanneer uw verificatiecode RS256 verwacht (de aanval met ‘algoritmeverwarring’).

Wat JWT niet is

  • Niet versleuteld. De header en de payload zijn base64-gecodeerd, wat triviaal te decoderen is. Plaats nooit geheimen in een JWT zonder die in JWE te verpakken.
  • Standaard niet intrekbaar. Eenmaal uitgegeven is een JWT geldig tot exp. Voor intrekking hebt u een zwarte lijst nodig, of een korte vervaltijd plus vernieuwingstokens.
  • Geen vervanging voor sessiecookies in elk gebruiksscenario. Ondoorzichtige tokens die aan de serverkant worden opgeslagen, zijn vaak eenvoudiger en veiliger.

Veelvoorkomende fouten

  • De header vertrouwen. kid en alg komen uit het token zelf. Een gecompromitteerde server kan ze willekeurig instellen; valideer altijd tegen een vaste lijst.
  • De afwijking van nbf en iat negeren. Klokverloop betekent dat iat > now kan voorkomen. Sta een kleine marge toe (30–60 s).
  • Volledige JWT’s loggen. De payload bevat vaak gebruikers-ID’s, e-mailadressen en rechten, PII die niet in stdout terecht mag komen.
  • HS256 met een zwakke sleutel gebruiken. Een sleutel van 16 tekens is binnen enkele minuten met brute force te kraken. Gebruik minstens 256 bit willekeurige entropie.

Veelgestelde vragen

Nee. De decodering wordt uitgevoerd in uw browser. Het token blijft lokaal opgeslagen, belangrijk omdat JWT’s vaak sessiedata, gebruikers-ID’s en toegangsrechten bevatten.

Ja. Als u het gedeelde HMAC-secret of de PEM-gecodeerde publieke sleutel plakt, vindt de verificatie plaats in uw browser. De sleutel verlaat uw apparaat nooit.

Het betekent dat het token niet is ondertekend. Gebruik dergelijke tokens nooit in een productieomgeving, omdat ze eenvoudig kunnen worden vervalst. Verschillende bekende CVE’s betroffen specifiek bibliotheken die standaard alg: none accepteerden.

Het JWT-signeren bevestigt de echtheid van de gegevens, niet hun vertrouwelijkheid. De header en de payload zijn gecodeerd met Base64URL, een omkeerbare methode. Voor meer veiligheid wordt JWE (JSON Web Encryption) gebruikt rondom het JWT; plaats gevoelige gegevens liever niet in de payload.

Gerelateerde tools

Tool beschikbaar in andere talen