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.
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
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
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
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.
secret: "password123" // guessable, low entropy
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.
{ "sub": "user_123", "role": "admin" } // no exp { "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.
-----BEGIN RSA PRIVATE KEY----- // PKCS1, not supported
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?
Wat is een JWT-generator?
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?
Is het veilig om mijn secret of private sleutel hier in te voeren?
Wat is het verschil tussen HS256 en RS256?
Welke algoritmen ondersteunt deze JWT-encoder?
Hoe stel ik de exp-claim (vervaldatum) in?
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?
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?
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?
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?
Waarom mislukt mijn RS256- of ES256-ondertekening?
-----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?
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?
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 →JWT decoderen — online JWT-decoder
Beveiligingstools
Decodeer JWT-tokens direct in je browser. Inspecteer header, payload, signature, vervaldatum en claims. 100% privé — je token verlaat je apparaat nooit.
Online MD5 Hash Generator & Checksum Tool
Beveiligingstools
Genereer MD5-, SHA-256-, SHA-1- en SHA-512-hashes gratis in je browser. Hash tekst of bestanden, verifieer checksums en kopieer resultaten. Geen account nodig.
Willekeurig wachtwoord genereren — online generator
Beveiligingstools
Genereer direct sterke willekeurige wachtwoorden — gratis, 100% in je browser. Stel lengte en tekens in, batch tot 50 met entropie-analyse.
SHA-1 Hash Generator (160-bit, verouderd)
Beveiligingstools
Genereer SHA-1 hashes in je browser — 40-tekens hex output, geen upload. Verouderd algoritme voor Git-vingerafdrukken, oude certificaatcontroles en migratieaudits. Je data verlaat je apparaat niet.
SHA-256 Hash-generator & Checksumtool
Beveiligingstools
Genereer SHA-256 hashes online gratis. Hash tekst of bestanden in je browser, verifieer checksums en kopieer 64-tekens hex output. Geen account nodig; je data verlaat de pagina niet.
SHA-3 Hash-generator (Keccak SHA3-256)
Beveiligingstools
Genereer SHA-3 hashes online gratis. NIST FIPS 202 sponge-constructie — de post-SHA-2 standaard. SHA3-256 output in 64 hex-tekens. Alleen browser via lazy-loaded js-sha3; geen uploads.