JWT-generator en -verifier
Maak en verifieer JSON Web Tokens met HS256, RS256, PS256, ES256 of EdDSA. Bewerk claims, stel exp en iat in en controleer handtekeningen in je browser.
Sleutels en tokens zijn geheimen. Alles wordt lokaal ondertekend en geverifieerd met de Web Crypto API van je browser: er wordt niets geüpload.
Een ondertekende JWT maken
Deze browser ondersteunt Ed25519 niet in Web Crypto, dus EdDSA is niet beschikbaar.
Testsleutels worden in je browser gegenereerd en hieronder ingevuld. Houd de privésleutel of het geheim voor jezelf; deel alleen de publieke sleutel.
Een JWT verifiëren
Zo maak je een ondertekende JWT
- Kies het Algoritme: HS256/384/512 (gedeeld geheim), RS256/384/512 of PS256/384/512 (RSA), ES256/384/512 (ECDSA op P-256, P-384 of P-521) of EdDSA (Ed25519, als je browser dat ondersteunt).
- Bewerk de Header (JSON) en de Payload (JSON-claims). Het veld
algvolgt altijd het gekozen algoritme entypstaat standaard opJWT. - Voeg datums toe met de knoppen voor tijdclaims: iat = nu, nbf = nu, of kies een Geldigheidsduur zoals “over 1 uur” en klik op exp instellen. De waarden zijn NumericDates: seconden sinds 1 januari 1970 UTC.
- Voer het Geheim in (bij HS-algoritmen, als tekst of als Base64/Base64url via Formaat van het geheim) of de Privésleutel (PEM of JWK). Nog geen sleutel? Klik op Testsleutel genereren.
- Klik op Token ondertekenen en daarna op Kopiëren, of klik op Dit token verifiëren om het meteen te controleren.
Zo verifieer je een JWT
- Plak het token in het veld Te verifiëren token.
- Kies het Verwacht algoritme. Laat je dit op “Uit de header van het token” staan, dan wordt geaccepteerd wat de header zegt, behalve
none. Kies je een specifiek algoritme, dan weigert de tool elk token dat anders is ondertekend, zoals een echte server ook hoort te doen. - Voer het geheim in, of de Publieke sleutel (PEM of JWK): een PEM-blok
PUBLIC KEY,RSA PUBLIC KEYofCERTIFICATE, een JWK of een JWK Set (de sleutel waarvan dekidovereenkomt met de header wordt gebruikt). - Stel eventueel een Klokspeling (seconden) in om kleine klokverschillen te tolereren en klik op Token verifiëren.
Het resultaat zegt of de handtekening geldig is en controleert daarna exp (vervaltijd) en nbf (niet geldig vóór) tegen de huidige tijd van je computer. Een token met een correcte handtekening maar een vervaldatum in het verleden wordt als verlopen gemeld, niet als geldig.
Sleutels en formaten
Om te ondertekenen accepteert de tool PKCS#8-blokken PRIVATE KEY, PKCS#1-blokken RSA PRIVATE KEY en SEC1-blokken EC PRIVATE KEY (die intern naar PKCS#8 worden omgezet), en private JWK’s. Sleutels met een wachtwoord moet je eerst zonder wachtwoord exporteren. Testsleutel genereren maakt een willekeurig geheim ter grootte van de hash voor HS-algoritmen, een RSA-sleutelpaar van 2048 bits voor RS en PS, een sleutel op de bijbehorende curve voor ES, of een Ed25519-paar. Je krijgt de sleutels als PEM en als JWK, en ze worden aan beide kanten ingevuld, zodat ondertekenen en verifiëren meteen werkt.
De handtekeningen volgen RFC 7515 en RFC 7518: RSA-PSS gebruikt een salt die even lang is als de hash, en ECDSA-handtekeningen zijn de ruwe aaneenschakeling r||s. De implementatie reproduceert het HS256-voorbeeld uit RFC 7515, bijlage A.1.
Beveiligingstips
- Alles draait in je browser met de Web Crypto API. Tokens en sleutels worden nergens naartoe gestuurd, maar gebruik toch liever testsleutels dan productiegeheimen.
alg: nonewordt nooit ondertekend en nooit geaccepteerd.- HMAC-geheimen moeten minstens zo lang zijn als de hash (32 bytes voor HS256). Een korter geheim geeft een waarschuwing.
- Een handtekening bewijst integriteit en herkomst, niet dat de claims kloppen: servers moeten ook
iss,auden de scopes controleren.
Veelgestelde vragen
Wat is het verschil tussen HS256 en RS256?
HS256 gebruikt één gedeeld geheim om zowel te ondertekenen als te verifiëren, dus elke partij die verifieert, kan ook tokens vervalsen. RS256 (en PS256, ES256, EdDSA) ondertekent met een privésleutel en verifieert met een publieke sleutel die je zonder risico kunt publiceren.
Waarom geeft een geldige handtekening toch een fout?
Omdat het token buiten zijn geldigheidsperiode valt: exp ligt in het verleden of nbf in de toekomst. De controle van de handtekening en die van de tijd worden apart gemeld.
Waarom wordt alg “none” geweigerd?
Een niet-ondertekend token kan iedereen maken. Het accepteren ervan was een klassiek beveiligingslek in JWT-bibliotheken, daarom weigert deze tool het zowel bij het ondertekenen als bij het verifiëren.
Kan ik mijn eigen RSA- of EC-sleutel gebruiken?
Ja. Plak de privésleutel als PEM of JWK om te ondertekenen en de publieke sleutel om te verifiëren. De tool controleert of het sleuteltype en de curve bij het gekozen algoritme passen.
Waarom is EdDSA uitgeschakeld?
Je browser ondersteunt Ed25519 nog niet in Web Crypto. Recente versies van Chrome, Edge, Firefox en Safari doen dat wel.
Vergelijkbare tools
- JWT-decoder Decodeer de header en payload van een JWT, lees exp, iat en nbf als datum en verifieer HS256-, RS256-, ES256- of EdDSA-handtekeningen in je browser.
- HMAC-generator Bereken een HMAC-SHA1, SHA-256, SHA-384 of SHA-512 met een tekst-, hex- of Base64-sleutel, krijg hex en Base64 en controleer een webhook-signature.
- Unix-timestamp omrekenen Reken Unix-timestamps in seconden of milliseconden om naar een leesbare datum in lokale tijd, UTC en ISO 8601, en zet elke datum terug om naar epochtijd.
- JSON formatteren en valideren Gratis JSON-formatter en -validator die JSON in je browser leesbaar maakt, minifyt en controleert, met syntaxfouten gemeld per regel en kolom.