A JWT (JSON Web Token) is een open standaard gedefinieerd door de RFC 7519 gebruikt in cyberveiligheid om informatie-uitwisselingen tussen partijen te authenticeren en te beveiligen.
Hiermee kunnen gegevens op een compacte, veilige en verifieerbare manier worden verzonden, op basis van digitale handtekeningen of een encryptie om de integriteit en, indien van toepassing, de vertrouwelijkheid van de informatie te waarborgen.
Structuur van een JWT
Een JWT bestaat uit drie hoofdonderdelen, elk gecodeerd in Base64URL en gescheiden door een punt (.
) :
-
Kop
- Functie Definieer het handtekeningalgoritme (bijvoorbeeld HS256, RS256, ES256) en geef het token-type aan (meestal "JWT").
- Voorbeeld :
{"alg":"HS256","typ":"JWT"}
.
-
Lading (nuttige lading)
- Functie De "claims" zijn nuttige informatie zoals de identificatiecode, rollen en vervaldatum van de gebruiker.
- Soorten claims :
- Geregistreerde claims gestandaardiseerde claims zoals
iss
(zender),exp
(vervaldatum),sub
(onderwerp) enaud
(publiek). - Openbare claims claims: claims die kunnen worden gedefinieerd door de gemeenschap of door de gebruiker voor gedeelde informatie.
- Particuliere claims informatie die specifiek is voor een bepaalde context of toepassing.
- Geregistreerde claims gestandaardiseerde claims zoals
- Encryptie-optie Hoewel de payload vaak eenvoudigweg wordt ondertekend (JWS), kan deze voor extra bescherming worden versleuteld met behulp van het JWE-formaat (JSON Web Encryption).
-
Handtekening
- Functie Handtekening: om de integriteit van het token te garanderen. De handtekening wordt gegenereerd door de header en de payload (eerder gecodeerd) te combineren met een geheime sleutel of een privésleutel (voor asymmetrische algoritmen) volgens het gespecificeerde algoritme.
- Voorbeeld Voor HS256 wordt de handtekening verkregen via HMAC-SHA256.
👉 Gebruikssituaties in cyberbeveiliging
- Authenticatie Zodra de gebruiker is ingelogd, genereert de server een JWT die de client opneemt in HTTP-verzoeken (bijvoorbeeld in de
Autorisatie: Drager
). Hierdoor kan de server bij elke aanvraag de identiteit van de client controleren zonder dat er server-side sessie-opslag nodig is. - Veilige informatie-uitwisseling In een microservicesarchitectuur of wanneer API's op elkaar inwerken, zorgt JWT ervoor dat gegevens betrouwbaar en veilig kunnen worden verzonden.
- Single Sign-On (SSO) Sessie delen: maakt het makkelijker om sessies te delen tussen verschillende applicaties door de authenticatie te centraliseren met behulp van een enkel token.
✔ Voordelen
- Staatloos geen opslag op de server (in tegenstelling tot sessies).
- Laptop kan in verschillende contexten worden gebruikt (web, mobiel, API).
- Compact lichtgewicht formaat, gemakkelijk te verzenden via URL, HTTP-headers of koekjes.
- Flexibel: ze kunnen worden gebruikt in verschillende verificatieprotocollen en -frameworks, waaronder OAuth2 en OpenID Connect
Risico's en goede praktijken
Veelvoorkomende fouten
- Handtekening niet geverifieerd Als de handtekening niet correct wordt gecontroleerd, kan een aanvaller de inhoud van het token wijzigen.
- Gebruik van zwakke algoritmen Als u bijvoorbeeld HS256 met een zwakke sleutel gebruikt, wordt u blootgesteld aan aanvallen door brute kracht.
- Onvoldoende opslag Het opslaan van het JWT op kwetsbare locaties (zoals localStorage) kan leiden tot aanvallen. XSS en diefstal van tokens.
- Token kaping In het geval van onderschepping kan een gestolen token worden gebruikt om zich voor te doen als de gebruiker.
🟩 Goede praktijken
- HTTPS gebruiken alle communicatie versleutelen om te voorkomen dat tokens worden onderschept.
- Robuuste algoritmen kiezen De volgende stappen moeten worden genomen: gebruik veilige algoritmen (bijv. RSA of ECDSA) en voldoende complexe sleutels.
- Beperking van de levensduur definiëren korte vervaldata (
exp
) om de geldigheidsduur van het token te verkorten in het geval van een compromis. - Systematisch valideren elke keer dat het token wordt gebruikt de handtekening en claims verifiëren.
- Intrekkingsmechanismen : implementeer strategieën om gecompromitteerde of verlopen tokens ongeldig te maken.
Voorbeeld van JWT
Verschil met andere verificatietechnologieën
- JWT vs Sessiecookies JWT's zijn zelfondersteunend en vereisen geen server-side opslag, in tegenstelling tot sessiecookies, die afhankelijk zijn van sessiebeheer.
- JWT vs OAuth2 OAuth2 is een autorisatieraamwerk dat verschillende tokenformaten kan gebruiken, waaronder JWT, om verificatiegegevens te verzenden.
- JWT vs SAML Terwijl SAML (Security Assertion Markup Language) een XML-standaard is voor SSO in bedrijfsomgevingen, biedt JWT een lichter formaat dat beter geschikt is voor moderne webapplicaties.