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.
