Skip to content

JWT-encoder & generator

Gratis online JWT-generator & encoder. Bouw de header en payload en onderteken direct met HS256, RS256 of ES256. 100% in de browser — je secret en sleutel verlaten je apparaat nooit.

Geen tracking Draait in je browser Gratis
Payload (claims)
Voeg een geregistreerde claim in:
Secret
Lokaal ondertekend in je browser — je secret en private sleutel verlaten je apparaat nooit.
Volgt het ondertekeningsgedrag van RFC 7515/7518 met uitvoer kruislings geverifieerd aan de hand van een onafhankelijke publieke-sleutelverifieerder — Go Tools Security Team · Jun 11, 2026

Wat is een JWT-encoder?

Een JWT-encoder bouwt en ondertekent cryptografisch een JSON Web Token vanuit een header en een payload met claims. Een JWT, gedefinieerd in RFC 7519, bestaat uit drie via Base64URL geëncodeerde secties gescheiden door punten: header.payload.signature. De header noemt het ondertekeningsalgoritme; de payload draagt de claims (over wie het token gaat, wat het mag, wanneer het verloopt); en de signature is een cryptografisch bewijs, berekend over de header en payload met een secret of private sleutel, waarmee een ontvanger manipulatie kan detecteren.

"JSON Web Token (JWT) is een compact claims-representatieformaat bedoeld voor omgevingen met beperkte ruimte, zoals HTTP Authorization-headers en URI-queryparameters." — RFC 7519, Sectie 1

Encoderen is de tegenhanger van decoderen. Een JWT-decoder leest de claims van een bestaand token; een encoder neemt claims die jij aanlevert en produceert een gloednieuw ondertekend token. De ondertekeningsstap is wat een echt JWT onderscheidt van willekeurige Base64 — zonder een geldige signature accepteert geen enkele verifieerder het token. Deze tool ondertekent met de native Web Crypto API van de browser over de HMAC- (HS), RSA- (RS, PS) en ECDSA- (ES) families, dus de hele operatie gebeurt op je apparaat met nul afhankelijkheden en nul netwerkoproepen.

Developers grijpen voortdurend naar een JWT-encoder: om een token aan te maken dat een beveiligd API-endpoint test, om de exacte claimvorm te reproduceren die een OAuth-server uitgeeft zodat een bug kan worden gedebugd, om fixtures voor integratietests te bouwen, of om een teamgenoot een kant-en-klaar Bearer-token voor een curl-commando te overhandigen. Omdat de payload geëncodeerd is, niet versleuteld, is een JWT veilig om over het netwerk te versturen, maar mag het nooit geheimen bevatten — iedereen met het token kan elke claim lezen, en alleen de signature voorkomt dat ze er één wijzigen.

JWT-werk gaat van nature samen met andere developer tools. Na ondertekening kun je het token decoderen om de claims te bevestigen, exp en iat omrekenen tussen Unix-tijd en leesbare datums, of een SHA-256-hash berekenen wanneer je de onderliggende hashfunctie nodig hebt waarop de HMAC van HS256 is gebouwd. Omdat elk JWT-segment via Base64URL is geëncodeerd, komt een Base64-tool van pas wanneer je een token handmatig inspecteert; voor een diepgaande blik op de codering, zie onze Base64-basisgids.

// Sign a JWT in the browser with the Web Crypto API (HS256)
async function encodeJwt(payload, secret) {
  const b64url = (bytes) =>
    btoa(String.fromCharCode(...new Uint8Array(bytes)))
      .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
  const enc = (obj) =>
    b64url(new TextEncoder().encode(JSON.stringify(obj)));

  const header = { alg: 'HS256', typ: 'JWT' };
  const signingInput = `${enc(header)}.${enc(payload)}`;

  const key = await crypto.subtle.importKey(
    'raw', new TextEncoder().encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
  const sig = await crypto.subtle.sign(
    'HMAC', key, new TextEncoder().encode(signingInput));

  return `${signingInput}.${b64url(sig)}`;
}

const token = await encodeJwt({ sub: 'user_123', exp: 1999999999 }, 'my-secret');
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTk5OTk5OTk5OX0....

Functies

Direct JWT's genereren & ondertekenen

Bewerk de payload en zie het ondertekende token in realtime bijwerken — header, payload en signature ter plekke berekend. Geen Genereren-knop, geen round-trip naar een server.

Volledige algoritmedekking

Onderteken met HS256/384/512, RS256/384/512, PS256/384/512 en ES256/384/512 — elke gangbare JWS-familie, allemaal via de native Web Crypto API van de browser.

Sleutels verlaten je apparaat nooit

Je secret en PKCS8 private sleutel worden volledig in de browser gebruikt. Niets wordt geüpload, gelogd of opgeslagen — veilig voor ontwikkeling en incidentrespons.

Snelle-claim-helpers

Voeg iss, sub, aud, iat, nbf of een exp van één uur in met één klik — geen handmatige Unix-timestamps, geen syntaxfouten.

In kleur gemarkeerde uitvoer

Het ondertekende token is opgedeeld in header, payload en signature met onderscheidende kleuren, zodat de structuur in één oogopslag duidelijk en eenvoudig te kopiëren is.

Nul afhankelijkheden

Gebouwd uitsluitend op de Web Crypto API en JSON van de browser — geen externe bibliotheken, geen telemetrie, geen enkele netwerkoproep.

Voorbeelden

HS256 Sessietoken

{
  "sub": "user_123",
  "name": "Alice",
  "role": "admin",
  "iat": 1715000000,
  "exp": 1999999999
}
secret: a-string-secret-at-least-256-bits-long
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.<HMAC-SHA256 signature>

Een HMAC-SHA256-token ondertekend met een gedeelde secret — de meest gebruikte opzet voor stateless sessie-authenticatie. Iedereen die dezelfde secret heeft, kan het verifiëren.

RS256 Access Token

{
  "iss": "https://auth.example.com",
  "aud": "api.example.com",
  "sub": "90087165",
  "scope": "read:user write:post",
  "iat": 1715000000,
  "exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (PKCS8)
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsInNjb3BlIjoicmVhZDp1c2VyIHdyaXRlOnBvc3QiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<RSA signature>

Een RSA-ondertekend access token in OAuth-stijl. Het token wordt ondertekend met je private sleutel en geverifieerd door iedereen met de bijbehorende publieke sleutel — ideaal wanneer de verifieerder geen tokens mag kunnen aanmaken.

ES256 Compact Token

{
  "sub": "device-42",
  "iat": 1715000000,
  "exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (P-256)
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZXZpY2UtNDIiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<ECDSA P-256 signature>

Een ECDSA-token op de P-256-curve. ES256-signatures zijn veel korter dan RSA en bieden gelijkwaardige beveiliging, waardoor het token klein blijft voor beperkte omgevingen.

Zo gebruik je het

  1. 1

    Bewerk de payload-claims

    Schrijf de claims die je token nodig heeft als JSON in de payload-editor. Gebruik de snelle-claim-chips om iss, sub, aud, iat, nbf of een exp van één uur in te voegen zonder timestamps te typen.

  2. 2

    Kies een algoritme & voer de sleutel in

    Kies een ondertekeningsalgoritme. Voor HS256/384/512 voer je een secret in; voor RS-, PS- of ES-algoritmen plak je een PKCS8 PEM private sleutel. Het token wordt lokaal ondertekend terwijl je typt.

  3. 3

    Kopieer het ondertekende JWT

    Het ondertekende token verschijnt direct, in kleur gemarkeerd per segment. Klik op Kopiëren om het in een Authorization-header, curl-commando of test te zetten. Je sleutel heeft je browser nooit verlaten.

Common Errors

Een zwakke HMAC-secret gebruiken

HS256-beveiliging hangt volledig af van de entropie van de secret. Een korte of raadbare secret laat aanvallers hem brute-forcen en tokens vervalsen. Gebruik minstens 256 bits aan willekeur.

✗ Fout
secret: "password123"  // guessable, low entropy
✓ Correct
secret: base64(crypto.randomBytes(32))  // >=256 random bits

De exp-claim weglaten

Een token zonder exp verloopt nooit. Als het lekt, is er geen natuurlijk intrekkingspunt. Stel altijd een vervaldatum in die past bij het tokentype.

✗ Fout
{ "sub": "user_123", "role": "admin" }  // no exp
✓ Correct
{ "sub": "user_123", "role": "admin", "exp": 1715003600 }

Een PKCS1-sleutel plakken in plaats van PKCS8

De Web Crypto API importeert alleen PKCS8 private sleutels. Een traditionele RSA PKCS1-sleutel kan niet worden geïmporteerd — converteer hem eerst.

✗ Fout
-----BEGIN RSA PRIVATE KEY-----  // PKCS1, not supported
✓ Correct
openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem

Veelvoorkomende toepassingen

Tokens genereren voor API-tests
Genereer in seconden een HS256 Bearer-token om een beveiligd endpoint te testen vanuit curl, Postman of een integratietest.
OAuth- & OIDC-tokens reproduceren
Bouw een RS256- of ES256-token dat overeenkomt met wat je autorisatieserver uitgeeft, zodat je claim- en audience-mismatches kunt debuggen.
Testfixtures aanmaken
Produceer deterministische ondertekende tokens voor unit- en integratietests zonder een volledige auth-server op te zetten.
Autorisatiefouten debuggen
Reproduceer de tokenvorm van een klant — issuer, audience, scope, vervaldatum — om te achterhalen waarom een backend hem afwijst.
Een verifieerder valideren
Onderteken tokens met een bekende sleutel om te bevestigen dat je verificatiemiddleware geldige tokens accepteert en gemanipuleerde tokens afwijst.
Auth-flows prototypen
Geef teamgenoten kant-en-klare tokens terwijl je een nieuwe login, microservice of service-to-service-aanroep aansluit.

Technische details

Conform RFC 7519 / 7515 / 7518
Produceert JWS-tokens conform RFC 7519 (JWT), RFC 7515 (JWS) en RFC 7518 (JWA), met de geregistreerde algoritme-identificatoren in de header.
Native Web Crypto-ondertekening
Ondertekent via crypto.subtle voor HMAC, RSASSA-PKCS1-v1_5, RSA-PSS en ECDSA. ECDSA-signatures worden uitgegeven als onbewerkte r||s, precies zoals JWS vereist.
Base64URL, nul afhankelijkheden
Header en payload worden via Base64URL geëncodeerd met het URL-veilige alfabet (RFC 4648), zonder padding. Geen externe bibliotheken, geen netwerkoproepen, geen telemetrie.

Best practices

Stel altijd een vervaldatum in
Voeg een exp-claim toe zodat een gelekt token ophoudt geldig te zijn. Korte levensduren verkleinen de schade — minuten voor access tokens, geen dagen.
Houd geheimen buiten de payload
Een JWT-payload is leesbaar voor iedereen met het token. Zet er identificatoren en scopes in; nooit wachtwoorden, API-sleutels of volledige PII.
Onderteken server-side in productie
Gebruik deze tool voor tests en debuggen. In echte systemen onderteken je tokens op de server met een onderhouden bibliotheek en een sleutel uit je secrets manager.

Veelgestelde vragen

Hoe genereer ik een JWT online?
Bewerk de payload-JSON in het vak hierboven, kies een ondertekeningsalgoritme (HS256 is de standaard en heeft alleen een secret nodig) en voer je secret in of plak een PKCS8 PEM private sleutel. Het ondertekende token verschijnt direct, met de header-, payload- en signature-segmenten in kleur gemarkeerd zodat je het geheel met één klik kunt kopiëren. Ondertekenen gebeurt volledig in je browser via de native Web Crypto API — er is geen Genereren-knop om op te wachten en geen verzoek naar een server, dus het is veilig om tokens met echte sleutels te ondertekenen tijdens ontwikkeling.
Wat is een JWT-generator?
Een JWT-generator is een tool die een JSON Web Token bouwt en cryptografisch ondertekent vanuit een header en een payload met claims, wat een header.payload.signature-string oplevert die je als Bearer-token kunt gebruiken. Het is de tegenhanger van een JWT-decoder: in plaats van een bestaand token te lezen, maakt het een nieuw token aan dat is ondertekend met je secret (HS256) of private sleutel (RS256/ES256). Deze generator draait volledig in je browser, dus het token wordt direct geproduceerd en je ondertekeningssleutel verlaat je apparaat nooit.
Is deze JWT-generator gratis en veilig te gebruiken?
Ja — hij is volledig gratis, zonder registratie, zonder advertenties en zonder tracking. Hij is veilig omdat alle ondertekening lokaal in je browser plaatsvindt via de Web Crypto API: je payload, secret en private sleutel worden nooit geüpload, gelogd of opgeslagen, en de tool doet helemaal geen netwerkverzoeken. Dat maakt hem geschikt zelfs wanneer je met gevoelige sleutels werkt, al is het gebruik van wegwerptestsleutels altijd de veiligste gewoonte.
Is het veilig om mijn secret of private sleutel hier in te voeren?
Ja. Ondertekenen gebeurt lokaal in je browser; je secret en private sleutel worden nooit naar een server gestuurd, nooit gelogd, nooit opgeslagen en nooit voor analyses gebruikt. Er zijn geen cookies en geen tracking. Dit is belangrijk omdat een JWT-ondertekeningssleutel geldige credentials kan aanmaken — hem in een externe tool plakken zou gelijkstaan aan het afgeven van de sleutels tot je auth-systeem. Omdat alles client-side draait, is deze encoder veilig te gebruiken met productiesleutels, maar je geeft nog steeds best de voorkeur aan wegwerp- of testsleutels waar mogelijk.
Wat is het verschil tussen HS256 en RS256?
HS256 (HMAC-SHA256) gebruikt één gedeelde secret om zowel te ondertekenen als te verifiëren. Het is eenvoudig en snel, maar elke partij die het token kan verifiëren, kan er ook één aanmaken, dus de secret mag alleen op vertrouwde servers blijven. RS256 (RSA-SHA256) gebruikt een sleutelpaar: je ondertekent met een private sleutel en anderen verifiëren met de publieke sleutel. Zo kun je de publieke sleutel vrij verspreiden — naar client-apps, partnerservices of een JWKS-endpoint — zonder iemand de mogelijkheid te geven tokens te vervalsen. Gebruik HS256 voor symmetrische systemen met één eigenaar; gebruik RS256 of ES256 wanneer verifieerders geen tokens mogen kunnen aanmaken.
Welke algoritmen ondersteunt deze JWT-encoder?
Hij ondertekent met HS256, HS384, HS512 (HMAC met een gedeelde secret), RS256, RS384, RS512 (RSA PKCS#1 v1.5), PS256, PS384, PS512 (RSA-PSS) en ES256, ES384, ES512 (ECDSA op P-256, P-384 en P-521). Alle worden geproduceerd met de native Web Crypto API van de browser, dus er zijn geen externe bibliotheken en niets verlaat je machine. HMAC-algoritmen nemen een tekst- of Base64-secret; de RSA- en ECDSA-families nemen een PKCS8 PEM private sleutel.
Hoe stel ik de exp-claim (vervaldatum) in?
Voeg een exp-claim toe aan de payload als Unix-timestamp in seconden — bijvoorbeeld "exp": 1999999999. De snelste manier is de chip exp +1h onder de payload, die een vervaldatum één uur vanaf nu invoegt. Je kunt op dezelfde manier ook iat (issued-at) en nbf (not-before) toevoegen. Onthoud dat exp in seconden is, niet milliseconden, en dat verifieerders het vergelijken met hun eigen klok, dus houd servertijden gesynchroniseerd om voortijdige afwijzingen te voorkomen. Om een leesbare datum naar een Unix-timestamp om te zetten, gebruik je onze Unix-timestampomrekenaar.
Hoe krijg ik een PKCS8 PEM private sleutel voor RS256 of ES256?
Voor RSA: openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem. Voor ECDSA P-256: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ec-private.pem. Beide commando's leveren een PKCS8 PEM-blok dat begint met -----BEGIN PRIVATE KEY-----, precies wat deze tool verwacht. Plak het volledige blok, inclusief de header- en footerregels. De bijbehorende publieke sleutel — gebruikt om het token te verifiëren — kun je afleiden met openssl pkey -in private.pem -pubout.
Hoe verifieer ik het token dat ik zojuist heb gegenereerd?
Plak het in onze JWT-decoder om te bevestigen dat de header en payload decoderen zoals verwacht. Om de signature te verifiëren, gebruik je je server of een SDK met de juiste sleutel: jwt.verify(token, secretOrPublicKey, { algorithms: ['HS256'] }) in Node.js, PyJWT.decode(token, key, algorithms=['RS256']) in Python of jwt.Parse(token, keyFunc) in Go. Verifieer in productie nooit met een lege algoritmenlijst of met verify_signature=False — pin altijd exact het algoritme dat je verwacht.
Wat moet ik in de payload zetten?
Houd hem beknopt. De geregistreerde claims uit RFC 7519 zijn iss (issuer), sub (subject — meestal een gebruikers-ID), aud (audience), exp (expiration), nbf (not before), iat (issued at) en jti (token-ID). Daarnaast kun je applicatieclaims toevoegen zoals role, scope of email. Stop geen geheimen in de payload — een JWT is geëncodeerd, niet versleuteld, dus iedereen met het token kan elke claim lezen. Houd tokens onder ongeveer 4 KB zodat ze passen in Authorization-headers en cookies.
Is een JWT versleuteld?
Nee. Een standaard ondertekend JWT (een JWS) is via Base64URL geëncodeerd, niet versleuteld. De signature bewijst dat er niet met het token is geknoeid en dat het is uitgegeven door iemand met de sleutel, maar de header en payload zijn volledig leesbaar voor iedereen met het token. Als je wilt dat de payload zelf vertrouwelijk is, heb je een JWE (versleuteld JWT) nodig, wat een ander formaat is. Deze tool produceert ondertekende JWS-tokens, het type dat wordt gebruikt voor de overgrote meerderheid van authenticatie- en autorisatieflows.
Waarom mislukt mijn RS256- of ES256-ondertekening?
De meest voorkomende oorzaken zijn: (1) de sleutel staat niet in PKCS8-formaat — converteer een traditionele -----BEGIN RSA PRIVATE KEY------sleutel (PKCS1) met openssl pkcs8 -topk8 -nocrypt -in old.pem -out pkcs8.pem; (2) de curve komt niet overeen met het algoritme — ES256 heeft een P-256-sleutel nodig, ES384 heeft P-384 nodig, ES512 heeft P-521 nodig; (3) je hebt een publieke sleutel of een certificaat geplakt in plaats van de private sleutel; of (4) de sleutel is versleuteld met een wachtwoordzin, die de Web Crypto API niet rechtstreeks kan importeren. Ontsleutel die eerst met openssl pkey en plak het onversleutelde PKCS8-blok.
Ondersteunt deze tool het onondertekende alg:none-token?
Nee, en bewust niet. Een alg:none-token heeft geen signature, wat betekent dat iedereen er één kan vervalsen — het is de wortel van een klassieke JWT-kwetsbaarheid voor authenticatieomzeiling. Omdat het hele doel van een encoder is om een ondertekend token te produceren, biedt deze tool alleen echte ondertekeningsalgoritmen aan. Als je alg:none bestudeert voor beveiligingsonderzoek, kun je er handmatig één construeren door de header en payload via Base64URL te encoderen en het signature-segment leeg te laten — het token eindigt dan nog steeds met een puntje (header.payload.) — maar je mag zo'n token nooit in productie accepteren.
Kan ik in plaats daarvan een JWT in code genereren?
Ja. In Node.js: jsonwebtoken.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' }). In Python: jwt.encode(payload, key, algorithm='RS256') met PyJWT. In Go: jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString(privateKey). Deze tool is de snelste manier om een token te produceren voor een snelle test, een curl-verzoek of een fixture — maar in applicatiecode genereer je tokens best server-side met een onderhouden bibliotheek en een sleutel uit je secrets manager, nooit hard-coded.

Gerelateerde tools

Alle tools bekijken →