JSON Web Token (JWT)

JWT, JSON Web Tokens, JWT-token, JSON-token, Webtoken, JWT-authenticatie, Bearer token, Access token
JSON Web Token (JWT) is een open standaard voor het veilig uitwisselen van informatie tussen partijen als een JSON-object. Het wordt veel gebruikt voor authenticatie en autorisatie in webapplicaties en API's.

Wat is JSON Web Token (JWT)?

JSON Web Token (JWT) is een compacte, URL-veilige standaard (RFC 7519) voor het representeren van claims die uitgewisseld worden tussen twee partijen. Een JWT bestaat uit drie delen die gescheiden worden door punten: de header, de payload en de signature. Deze technologie wordt breed ingezet voor authenticatie en autorisatie in moderne webapplicaties, mobile apps en API's.

Structuur van een JWT

Een JWT heeft de volgende structuur: xxxxx.yyyyy.zzzzz, waarbij:

  • Header: Bevat het type token (JWT) en het gebruikte hash-algoritme (bijvoorbeeld HMAC SHA256 of RSA)
  • Payload: Bevat de claims, oftewel de statements over een entiteit (meestal de gebruiker) en aanvullende metadata
  • Signature: Wordt gebruikt om te verifiëren dat het bericht niet is gewijzigd en, bij tokens ondertekend met een private key, om de afzender te verifiëren

Hoe werkt JWT?

Wanneer een gebruiker succesvol inlogt, retourneert de server een JWT. Deze token wordt vervolgens door de client opgeslagen (bijvoorbeeld in localStorage of een cookie) en meegestuurd bij elke volgende request naar de server, meestal in de Authorization header met het Bearer schema. De server valideert de token en geeft toegang tot beschermde resources op basis van de claims in de token.

Voordelen van JWT

  • Stateless: De server hoeft geen sessie-informatie op te slaan, wat schaalbaarheid verbetert
  • Compact: JWT's zijn klein en kunnen eenvoudig via URL's, POST parameters of HTTP headers verzonden worden
  • Self-contained: De payload bevat alle benodigde informatie over de gebruiker, waardoor database queries verminderd worden
  • Cross-domain: Werkt naadloos over verschillende domeinen en is ideaal voor microservices architecturen

Beveiligingsoverwegingen

Hoewel JWT's krachtig zijn, is het belangrijk om ze correct te implementeren. JWT's zijn niet versleuteld maar alleen ondertekend, dus gevoelige informatie moet niet in de payload worden opgeslagen tenzij deze wordt versleuteld. Gebruik altijd HTTPS voor transport, implementeer token expiratie, en bescherm tegen common vulnerabilities zoals token theft en replay attacks.

Toepassingen van JSON Web Token (JWT)

Authenticatie

De meest voorkomende toepassing van JWT is voor authenticatie. Nadat een gebruiker inlogt met gebruikersnaam en wachtwoord, wordt een JWT gegenereerd en naar de client gestuurd. Bij volgende requests stuurt de client deze token mee, waardoor de server de gebruiker kan identificeren zonder opnieuw in te loggen. Dit is bijzonder nuttig voor Single Sign-On (SSO) implementaties waarbij gebruikers toegang krijgen tot meerdere applicaties met één login.

API Autorisatie

JWT's worden veel gebruikt voor het beveiligen van RESTful API's. De token bevat informatie over de rechten en rollen van de gebruiker, waardoor de API kan bepalen welke resources en acties toegankelijk zijn. Dit is essentieel voor microservices architecturen waarbij verschillende services elkaar aanroepen en gebruikersrechten moeten valideren zonder centrale sessie-opslag.

Informatie-uitwisseling

JWT's zijn een veilige manier om informatie tussen partijen uit te wisselen. Omdat tokens ondertekend kunnen worden met public/private key pairs, kun je zeker zijn van de identiteit van de afzender. Bovendien kun je door de signature te verifiëren vaststellen dat de inhoud niet is gemanipuleerd tijdens het transport.

Mobile Applicaties

Voor mobile apps zijn JWT's ideaal omdat ze stateless zijn en geen server-side sessie vereisen. Dit vermindert de serverbelasting en maakt het eenvoudiger om te schalen. Mobile apps kunnen de token lokaal opslaan en meesturen bij elke API call, wat resulteert in snellere response tijden en betere gebruikerservaring.

E-commerce Platforms

In e-commerce omgevingen worden JWT's gebruikt voor het beheren van gebruikerssessies, het autoriseren van betalingstransacties, en het beveiligen van checkout processen. Ze kunnen ook gebruikt worden voor het implementeren van shopping cart functionaliteit waarbij de cart-status in de token wordt opgeslagen voor tijdelijke bezoekers.

Third-party Integraties

Bij het integreren met externe services en API's zoals betalingsproviders, CRM-systemen of marketing automation platforms, worden JWT's vaak gebruikt voor veilige authenticatie. OAuth 2.0, een veelgebruikt autorisatie framework, maakt gebruik van JWT's in de vorm van access tokens en refresh tokens.

Veelgestelde vragen

Het belangrijkste verschil is dat JWT's stateless zijn, terwijl traditionele sessies stateful zijn. Bij traditionele sessies slaat de server sessie-informatie op (meestal in een database of in-memory store) en krijgt de client alleen een sessie-ID. Bij JWT's wordt alle benodigde informatie in de token zelf opgeslagen, waardoor de server geen sessie-data hoeft bij te houden.

Voordelen van JWT's zijn betere schaalbaarheid (geen gedeelde sessie-opslag nodig), geschiktheid voor microservices en mobile apps, en eenvoudigere implementatie van cross-domain authenticatie. Nadelen zijn dat JWT's niet eenvoudig ingetrokken kunnen worden voordat ze verlopen (tenzij je een blacklist bijhoudt, wat het stateless voordeel teniet doet) en dat ze groter zijn dan sessie-ID's.

Er zijn verschillende best practices voor het beveiligen van JWT's:

  • Gebruik HTTPS: Verzend JWT's altijd over een versleutelde verbinding om man-in-the-middle attacks te voorkomen
  • Stel een korte expiratie tijd in: Beperk de geldigheid van tokens tot wat nodig is (bijvoorbeeld 15 minuten voor access tokens)
  • Gebruik refresh tokens: Implementeer een refresh token mechanisme voor langdurige sessies zonder de access token expiratie te verlengen
  • Valideer altijd de signature: Controleer server-side of de token niet is gemanipuleerd
  • Sla geen gevoelige data op: Plaats geen wachtwoorden, creditcardnummers of andere gevoelige informatie in de payload
  • Implementeer token revocation: Overweeg een blacklist voor uitgelogde of gecompromitteerde tokens
  • Gebruik sterke algoritmes: Kies voor RS256 of ES256 boven HS256 voor productie-omgevingen

Er zijn verschillende opties voor het opslaan van JWT's in de browser, elk met voor- en nadelen:

localStorage/sessionStorage: Eenvoudig te implementeren en toegankelijk vanuit JavaScript, maar kwetsbaar voor XSS (Cross-Site Scripting) attacks. Tokens blijven beschikbaar zelfs na het sluiten van tabs.

HTTP-only cookies: Veiliger tegen XSS omdat JavaScript geen toegang heeft tot de cookie, maar wel kwetsbaar voor CSRF (Cross-Site Request Forgery) attacks. Dit vereist extra CSRF-bescherming zoals SameSite cookie attributen.

Memory (JavaScript variabele): Meest veilig tegen XSS en CSRF, maar tokens gaan verloren bij page refresh, wat een refresh token mechanisme vereist.

De aanbevolen aanpak is een combinatie: sla access tokens op in memory en gebruik HTTP-only cookies met SameSite attributen voor refresh tokens. Dit biedt de beste balans tussen beveiliging en gebruikerservaring.

Auteur & updates

Auteur: Wouter
Publicatiedatum: 16-02-2026
Laatste update: 16-02-2026