DevToolPal
NL

JWT-encoder en -ondertekening

Maak en onderteken een JSON Web Token van een JSON-payload met HS256/384/512, of met RS, PS en ES via een PEM-privésleutel.

Draait lokaal, wordt nooit geüpload

Opties

Formaat van geheim

Payload (JSON)

0 tekens · 0 B

JWT

0 tekens · 0 B

Wat het doet

Een JSON Web Token (JWT, RFC 7519) is een compacte, URL-veilige string van drie delen gescheiden door punten: een header die het ondertekeningsalgoritme noemt, een payload met claims en een handtekening over de eerste twee delen. API’s gebruiken JWT’s als bearer-tokens, identiteitsproviders als ID-tokens.

Deze tool maakt en ondertekent een token van een JSON-payload. Ondersteund:

  • HS256, HS384, HS512: HMAC met een gedeeld geheim, als tekst of Base64.
  • RS256, RS384, RS512 en PS256, PS384, PS512: RSA-handtekeningen met een PEM-privésleutel.
  • ES256, ES384, ES512: ECDSA-handtekeningen met een EC-privésleutel.

Zo gebruik je het

  1. Schrijf de payload als JSON-object of klik op Voorbeeld.
  2. Kies het Algoritme en vul bovenaan het invoerveld het geheim in of plak de PEM-privésleutel.
  3. Zet desgewenst iat op nu, voeg een vervaltijd (exp) toe of extra headervelden zoals een sleutel-ID.
  4. Kopieer het token uit de uitvoer. Plak het in de JWT-decoder om het te bekijken.

Voorbeeld

Met het geheim your-256-bit-secret levert de onderstaande payload, ondertekend met HS256, het bekende voorbeeldtoken van jwt.io op:

{"sub":"1234567890","name":"John Doe","iat":1516239022}

De header wordt altijd geschreven als {"alg":"HS256","typ":"JWT"} gevolgd door de extra velden die je toevoegt; alg volgt altijd het gekozen algoritme.

Goede praktijk

Houd tokens kortlevend met een exp-claim en stel iss en aud in, zodat een token voor de ene dienst niet bij een andere kan worden hergebruikt. Controleer op de server altijd de handtekening met een expliciete lijst toegestane algoritmen en weiger none. HMAC-geheimen moeten lang en willekeurig zijn, minstens zo lang als de hashuitvoer (32 bytes voor HS256).

Veelgestelde vragen

› Welk algoritme kies ik?

Het algoritme dat je server controleert. HS256 gebruikt een gedeeld geheim en is gangbaar binnen één systeem. RS256 en ES256 ondertekenen met een privésleutel en iedereen kan met de publieke sleutel controleren, handig voor tokens die meerdere diensten controleren. ES256 geeft veel kortere handtekeningen dan RS256.

› Welke formaten voor privésleutels worden geaccepteerd?

PEM-sleutels in PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 RSA (BEGIN RSA PRIVATE KEY) en SEC1 EC (BEGIN EC PRIVATE KEY). Versleutelde sleutels moet je eerst zonder wachtzin exporteren. Voor ES256, ES384 en ES512 moet de sleutel respectievelijk op de curve P-256, P-384 of P-521 liggen.

› Is de payload van een JWT geheim?

Nee. Header en payload zijn alleen Base64URL-gecodeerd en iedereen met het token kan ze lezen. De handtekening voorkomt wijzigingen, niet het lezen. Zet nooit wachtwoorden of andere geheimen in een JWT-payload.

› Wordt mijn geheim of privésleutel opgeslagen of verstuurd?

Nee. Ondertekenen gebeurt in je browser met de Web Crypto API. Het geheim of de sleutel staat alleen in het geheugen van deze pagina: niet opgeslagen, niet in de adresbalk en niet in deellinks. Plak toch liever geen productiesleutels in webpagina’s die je niet beheert.