🎫
← Terug naar handleidingen

Wat is JWT? Een complete gids voor JSON Web Tokens

· Tags: what-is-jwt, jwt-authentication, jwt-guide, api-security, token-based-auth

Wat is JWT?

JSON Web Token (JWT) is een open standaard (RFC 7519) die een compacte, zelfstandige manier definieert om informatie veilig tussen partijen uit te wisselen als een JSON-object. JWTs zijn het dominante tokenformaat in moderne webapplicaties, gebruikt voor alles van gebruikersauthenticatie en API-autorisatie tot veilige gegevensuitwisseling tussen microservices.

Hoe JWT-authenticatie werkt

JWT-authenticatie volgt een stateless patroon dat de noodzaak van sessieopslag aan serverzijde elimineert. Het begrijpen van deze stroom is essentieel om te begrijpen waarom JWTs de standaardkeuze zijn geworden voor moderne API-beveiliging.

De authenticatiestroom

  1. De gebruiker logt in — De client stuurt inloggegevens (gebruikersnaam en wachtwoord) naar de authenticatieserver.
  2. De server maakt een JWT aan — De server valideert de inloggegevens, maakt een JWT met daarin de identiteit en rechten van de gebruiker, ondertekent dit met een geheim of privésleutel en geeft het terug aan de client.
  3. De client slaat het token op — De client slaat de JWT op, doorgaans in localStorage, sessionStorage of een HTTP-only cookie.
  4. De client stuurt het token mee met elk verzoek — Voor elk volgend API-verzoek voegt de client de JWT toe aan de Authorization-header met behulp van het Bearer-schema: Authorization: Bearer <token>.
  5. De server verifieert het token — De server verifieert de JWT-signature, controleert de verlooptijd en haalt de gebruikersclaims op om het verzoek te autoriseren.
  6. Geen sessie-opzoeking nodig — Omdat de JWT alle benodigde informatie bevat, hoeft de server geen database of cache te raadplegen om de gebruiker te identificeren.

Waarom dit ertoe doet

Traditionele sessiegebaseerde authenticatie slaat sessie-ID's op in het geheugen of de database van de server. Elk geverifieerd verzoek vereist een opzoeking. JWTs elimineren deze opzoeking — het token zelf bewijst de identiteit van de gebruiker. Dit maakt op JWT gebaseerde systemen inherent schaalbaar, omdat elke server in een cluster een token kan verifiëren zonder gedeelde sessiestatus.

JWT versus sessiegebaseerde authenticatie

| Aspect | JWT-authenticatie | Sessiegebaseerde authenticatie | |--------|--------------------|------------------------------| | Opslag | Aan clientzijde (in het token) | Aan serverzijde (in geheugen of database) | | Schaalbaarheid | Geen gedeelde sessieopslag nodig | Vereist gedeelde sessieopslag over instanties | | Cross-domain | Werkt van nature over domeinen | Moeilijk om sessies te delen | | Mobielvriendelijk | Ja (geen cookies nodig) | Vereist cookie-ondersteuning | | Intrekking | Moeilijk (tot het token verloopt) | Eenvoudig (sessie uit de opslag verwijderen) | | Payloadgrootte | Groter per verzoek (token in header) | Minimaal (alleen sessie-ID) |

Waarom JWT wordt gebruikt voor API-beveiliging

De kenmerken die JWT geschikt maken voor authenticatie, maken het ook ideaal voor het beveiligen van API's.

Stateless en schaalbaar

Elke JWT bevat alle informatie die de server nodig heeft om een verzoek te autoriseren. Er is geen sessiedatabase om te raadplegen, geen cache om te controleren, geen status om tussen servers te synchroniseren. Load balancers kunnen verzoeken zonder coördinatie naar elke serverinstantie routeren.

Cross-domain en cross-origin

JWT werkt van nature over verschillende domeinen en origins. Een token dat is uitgegeven door auth.example.com kan worden gebruikt om api.example.com en admin.example.com te openen. Dit maakt JWT de basis van single sign-on (SSO)-systemen.

Fijnmazige autorisatie

De JWT-payload kan aangepaste claims bevatten voor rollen, rechten en organisatielidmaatschappen:

{
  "sub": "user_abc123",
  "role": "admin",
  "permissions": ["read:users", "write:users", "delete:users"],
  "org_id": "org_xyz789",
  "iat": 1516239022,
  "exp": 1516325422
}

De API-server leest deze claims rechtstreeks uit het token zonder extra opzoeking.

JWT voor single sign-on (SSO)

Single sign-on is een van de meest voorkomende JWT-toepassingen. In een typische SSO-architectuur:

  1. Een gebruiker logt in bij de identity provider (IdP) — zoals Auth0, Okta of Keycloak.
  2. De IdP geeft een JWT uit dat met zijn privésleutel is ondertekend.
  3. De gebruiker toont deze JWT aan meerdere applicaties.
  4. Elke applicatie verifieert de signature met behulp van de openbare sleutel van de IdP.
  5. Elke applicatie vertrouwt het token zonder bij elk verzoek met de IdP te communiceren.

Dit patroon maakt het mogelijk dat één enkele login toegang verleent tot tientallen services — e-mail, bestandsopslag, projectbeheer, HR-systemen — zonder dat elke service zijn eigen inlogstroom hoeft te implementeren.

JWT-beveiligingsaanbevolen werkwijzen

Hoewel JWT een sterke basis biedt voor API-beveiliging, is een correcte implementatie essentieel.

Houd tokens kortlevend

Stel de exp-claim (verloop) in op een korte duur — 15 minuten tot 1 uur voor toegangstokens. Gebruik refresh tokens met een langere levensduur (dagen of weken) om nieuwe toegangstokens te verkrijgen zonder dat de gebruiker opnieuw hoeft te authenticeren.

Gebruik altijd HTTPS

JWT versleutelt zijn payload niet. Iedereen die het token onderschept, kan de inhoud decoderen en lezen. Verzend JWTs altijd via HTTPS om onderschepping te voorkomen.

Valideer alles

Verifieer altijd de signature, controleer dat het token niet is verlopen, bevestig dat de aud-claim (doelgroep) overeenkomt met uw applicatie en wijs tokens met onverwachte algoritmen af.

Bewaar tokens veilig

Bewaar JWTs aan clientzijde, indien mogelijk, in HTTP-only cookies, of in het geheugen voor single-page applicaties. Vermijd localStorage voor tokens die toegang geven tot gevoelige gegevens.

Veelvoorkomende misvattingen over JWT

"JWT is versleuteld." — Nee. JWT is ondertekend, niet versleuteld. De payload is met base64url gecodeerd, wat omkeerbaar is. JWE (JSON Web Encryption) biedt wel versleuteling, maar dat is een aparte specificatie die niet door standaard JWT wordt gedekt.

"JWT voorkomt CSRF." — Niet op zichzelf. JWT in een Authorization-header helpt, maar als het token in een cookie staat, is nog steeds CSRF-bescherming nodig.

"JWT is alleen voor authenticatie." — JWT wordt gebruikt voor authenticatie, maar ook voor de uitwisseling van autorisatiegegevens, stateless sessies en het veilig delen van informatie tussen services.

JWT online decoderen en verkennen

Gebruik de JWT-decoder-tool om elk JSON Web Token te inspecteren. Plak uw token en zie onmiddellijk de gedecodeerde header, payload en het signature-algoritme. De tool helpt u te begrijpen welke gegevens uw tokens bevatten en te controleren of ze correct zijn gestructureerd.

Wat is JWT? Een complete gids voor JSON Web Tokens - CoolTool