Een JSON Web Token, oftewel JWT, is een korte ondertekende tekenreeks die een server aan een gebruiker geeft als identiteitsbewijs. Nadat iemand inlogt, maakt de server een token met gegevens zoals het gebruikers-ID en wat die persoon mag doen, ondertekent het met een geheime sleutel en geeft het mee. De gebruiker stuurt dat token bij elk verzoek terug, en de server hoeft alleen de handtekening te controleren.

Stel je een festivalbandje voor. Bij de ingang laat je één keer je ticket zien, krijgt een bandje, en vanaf dat moment is het bandje zelf genoeg om in en uit te lopen zonder opnieuw in de rij te staan. Een JWT werkt hetzelfde: de handtekening is het fraudebestendige zegel dat de houder echt is, dus de server hoeft niet telkens de database te raadplegen. Dit is de basis van moderne token-based authentication en een veelgebruikt onderdeel van OAuth-flows.

Een JWT bestaat uit drie delen: een header die zegt hoe hij is ondertekend, een payload met de claims, en de handtekening zelf. De eerste twee zijn gewoon gecodeerde tekst, geen versleuteling, en daarom kan iedereen ze lezen. Die leesbare payload is handig om basisgegevens over een gebruiker mee te dragen, maar het is ook precies de reden dat authentication-systemen er niets gevoeligs in zetten.

Eén ding is goed om te weten: een JWT is ondertekend, niet verborgen. De inhoud is voor iedereen leesbaar, dus zet er claims in, geen geheimen. En omdat iedereen die het token heeft het kan gebruiken, houd je tokens kortlevend en stuur je ze alleen over een versleutelde verbinding.

Bij TopDevs gebruiken we JWT’s om API’s stateless en snel te houden, gecombineerd met een korte vervaltijd en intrekking zodat een gelekt token niet lang misbruikt kan worden.