tigtools

JWT-generator

Bouw en onderteken een JSON Web Token om te testen, of controleer of de HMAC-handtekening van een token overeenkomt met een geheim. Ondertekenen gebruikt de Web Crypto API van uw browser.

Werkt in je browser Geen registratie nodig

Modus
De geheime sleutel blijft in dit browsertabblad en wordt nergens naartoe verzonden. Plak hier desondanks geen productie-ondertekeningsgeheimen op een website: iedereen die de geheime sleutel heeft, kan geldige tokens voor uw systeem aanmaken. Gebruik hier testgeheimen.

alg wordt ingesteld via het algoritmemenu; typ is standaard JWT.

Claims zoals sub, iat en exp. Tijden zijn seconden sinds 1970 (UTC).

Voer een geheim in om het token te ondertekenen.

Zo gebruik je deze tool

  1. Kies HS256, HS384 of HS512.
  2. Bewerk de payload-claims en klik op ‘iat en exp instellen’ om de huidige tijd en een vervaltijd toe te voegen.
  3. Voer een testgeheim in of genereer een willekeurig 256-bits geheim.
  4. Kopieer de ondertekende token. Schakel om een token te controleren naar ‘Handtekening verifiëren’, plak de token en voer het geheim in.

Hoe het werkt

Een JSON Web Token (RFC 7519) bestaat uit drie Base64URL-gecodeerde delen: een header, een payload met claims en een handtekening. Bij de HMAC-algoritmen HS256, HS384 en HS512 is de handtekening een HMAC met SHA-256, SHA-384 of SHA-512 over “header.payload”, met een gedeeld geheim als sleutel. Iedereen die het geheim kent, kan tokens aanmaken en verifiëren.

De tool serialiseert de header en payload als compacte JSON, codeert ze en ondertekent ze met crypto.subtle, de Web Crypto API die in uw browser is ingebouwd. Het veld alg in de header komt altijd overeen met het gekozen algoritme, typ is standaard JWT, en andere headervelden, zoals kid, blijven behouden. “Set iat and exp” schrijft de huidige tijd als iat (issued at) en voegt de gekozen levensduur toe als exp, beide in seconden sinds 1 januari 1970 UTC. Het resultaat komt overeen met andere JWT-bibliotheken; het klassieke jwt.io-voorbeeldtoken wordt bijvoorbeeld exact gereproduceerd.

Het geheim kan platte tekst zijn (de UTF-8-bytes vormen de sleutel) of Base64/Base64URL-gecodeerde bytes, die veel frameworks gebruiken. De knop voor een willekeurig geheim maakt 32 willekeurige bytes aan met crypto.getRandomValues. Gebruik voor HS256 ten minste 32 willekeurige bytes; korte, door mensen gekozen geheimen kunnen offline worden geraden aan de hand van een token.

Bij verificatie wordt het token gedecodeerd, wordt gecontroleerd dat het een HMAC-algoritme gebruikt en wordt de handtekening opnieuw berekend met crypto.subtle.verify. Ook wordt aangegeven wanneer exp of nbf betekenen dat het token is verlopen of nog niet geldig is. RS256, ES256 en andere public-key-algoritmen worden niet ondersteund en de verificatie hier controleert geen issuer, audience of andere claims die uw toepassing mogelijk vereist.

Voorbeelden

Een API lokaal testen

Uw ontwikkelserver verwacht HS256-tokens die zijn ondertekend met “dev-secret-change-me”. Stel sub in op een testgebruikers-ID, klik op “Set iat and exp” met 1 uur, voer het geheim in en stuur het token in een Authorization: Bearer-header.

Controleren welk geheim een token heeft ondertekend

Een staging-token wordt afgewezen. Plak deze in ‘Handtekening verifiëren’ en probeer het staginggeheim: ‘Handtekening niet geldig’ betekent dat de token met een ander geheim is ondertekend of dat het geheim een ander formaat heeft (tekst versus Base64).

Het jwt.io-voorbeeld reproduceren

Met header {"alg":"HS256","typ":"JWT"}, payload {"sub":"1234567890","name":"John Doe","iat":1516239022} en geheim ‘your-256-bit-secret’ eindigt de token op SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, hetzelfde als op jwt.io.

Veelgestelde vragen

Wordt mijn geheim naar uw server verzonden?

Nee. Ondertekenen en verifiëren gebeurt met de Web Crypto API in uw browser en het geheim wordt nergens opgeslagen of naartoe verzonden. Toch raden we aan alleen testgeheimen te gebruiken, omdat een echt ondertekeningsgeheim nooit op een website mag worden ingevoerd.

Waarom is de handtekening ongeldig terwijl het geheim klopt?

Controleer het formaat van het geheim. Sommige systemen gebruiken de tekst van het geheim, andere decoderen het eerst uit Base64, wat andere sleutelbytes oplevert. Controleer ook dat de token niet is gewijzigd en dat deze hetzelfde algoritme gebruikt.

Kan ik RS256- of ES256-tokens maken?

Niet met deze tool. Deze ondersteunt alleen de HMAC-algoritmen met gedeeld geheim HS256, HS384 en HS512.

Is de payload versleuteld?

Nee. Een ondertekende JWT is alleen gecodeerd; iedereen kan de payload decoderen en lezen. De handtekening bewijst alleen dat deze niet is gewijzigd. Zet geen wachtwoorden of andere geheimen in de payload.

Privacy

Tokens worden alleen in uw browser gemaakt en geverifieerd met de Web Crypto API. De header, payload, token en het geheim worden niet geüpload, opgeslagen of in analytics opgenomen.