Wat is een JWT? Een volledige uitleg van JSON-webtokens
Snel antwoord
Een JWT is een tekenreeks met drie Base64URL-gecodeerde delen gescheiden door punten: header.payload.signature. De header specificeert het algoritme, de payload bevat claims (user ID, roles, expiration) en de signature bewijst authenticiteit. Gebruik onze gratis JWT Decoder om token-inhoud in je browser te inspecteren.
Invoering
Een JWT (JSON Web Token) is een compact, URL-safe token-formaat gedefinieerd door RFC 7519 voor het veilig verzenden van informatie tussen partijen als een JSON-object. JWT's worden veel gebruikt voor authenticatie in webapplicaties: na login geeft de server een JWT die de client in volgende requests meestuurt. JWT's zijn stateless —de server hoeft het token niet in een database op te zoeken; het token zelf bevat de claims en een signature.
Stap voor stap
-
Begrijp de driedelige structuur
Een JWT bestaat uit drie delen: header (algoritme en type), payload (claims) en handtekening (bewijst integriteit). Elk deel is Base64URL-gecodeerd en gescheiden door punten: eyJhbGciOi...J9.eyJzdWIi...J9.signature. De eerste twee delen zijn leesbaar voor iedereen met het token; alleen de handtekening vereist de geheime sleutel.
-
Leer de standaardclaims
De payload bevat claims – uitspraken over het onderwerp. Standaardclaims: 'sub' (onderwerp/gebruikers-ID), 'iat' (uitgegeven op tijdstempel), 'exp' (vervaldatum), 'nbf' (niet eerder), 'iss' (uitgever), 'aud' (publiek). Aangepaste claims kunnen rollen, machtigingen of andere gegevens bevatten.
-
Begrijp ondertekeningsalgoritmen
JWT's gebruiken symmetrische (HS256 — gedeeld geheim) of asymmetrische (RS256, ES256 — publiek/privé sleutelpaar) ondertekening. De handtekening voorkomt manipulatie: als u een deel van het token wijzigt, wordt de handtekening ongeldig. Alleen de houder van de geheime/privésleutel kan geldige tokens aanmaken.
-
Gebruik JWT's voor authenticatie
Na het inloggen maakt de server een JWT en stuurt deze naar de client. De client neemt de JWT op in de autorisatieheader (Bearer-token) voor volgende verzoeken. De server verifieert de handtekening en controleert de vervaldatum; opzoeken in de database is niet nodig.
Voorbeelden
JWT structuur
Invoer: Een typische JWT
Uitvoer: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
Gedecodeerde kop
Invoer: Eerste deel gedecodeerd
Uitvoer: {"alg": "HS256", "typ": "JWT"}
Gedecodeerde lading
Invoer: Tweede deel gedecodeerd
Uitvoer: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Veelvoorkomende problemen
- Decoderen versus verifiëren: het decoderen van een JWT (het lezen van de inhoud ervan) bewijst NIET dat het authentiek is. Verifieer altijd de handtekening op de server met de geheime sleutel voordat u claims vertrouwt.
- JWT's opslaan in localStorage: dit maakt ze toegankelijk voor JavaScript, kwetsbaar voor XSS-aanvallen. Bewaar cookies in httpOnly voor een betere beveiliging.
- Tokens met een lange levensduur: als een token wordt gestolen, blijft deze geldig tot de vervaldatum. Gebruik kortstondige toegangstokens (15-60 min) met vernieuwingstokens voor lange sessies.
- Gevoelige gegevens in de payload: de payload is leesbaar voor iedereen met het token (deze is Base64, niet gecodeerd). Plaats nooit wachtwoorden, creditcards of geheimen in de payload.
Tips
- Controleer altijd de JWT-handtekening aan de serverzijde voordat u enige claim vertrouwt. Alleen decoderen is geen authenticatie.
- Gebruik kortstondige toegangstokens (15-60 minuten) met vernieuwingstokens voor lange sessies om schade door tokendiefstal te minimaliseren.
- Bewaar JWT's in httpOnly, Secure, SameSite-cookies in plaats van localStorage om XSS-aanvallen te voorkomen.
- Gebruik onze JWT Decoder om de inhoud van tokens te inspecteren op foutopsporing. Uw token verlaat nooit uw browser.