Wat is JWT (JSON Web Token)?

Een formaat om informatie (claims) in JSON-vorm met een handtekening door te geven. De drie delen, „header.payload.handtekening”, worden elk met Base64URL gecodeerd en met „.” aan elkaar gevoegd. Met de handtekening kan de ontvanger manipulatie detecteren en de uitgever bevestigen, maar in een typische ondertekende JWT is de payload niet versleuteld, dus er hoort geen geheime informatie in. JWT's worden onder meer gebruikt voor toegangstokens voor API-authenticatie en voor ID-tokens van OpenID Connect, en krijgen meestal een korte vervaltijd (exp).

Japanse benaming: JWT(JSON Web Token)

“JWT (JSON Web Token)” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Basis van webtechnologie.

Vakgebied: Basis van webtechnologie

De drie delen

De header bevat het ondertekeningsalgoritme (bijvoorbeeld HS256) en het type; {"alg":"HS256","typ":"JWT"} met Base64URL coderen geeft eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. De payload bevat claims zoals de identificatie van de gebruiker (sub), de uitgever (iss) en de vervaltijd (exp). De handtekening wordt berekend over de gecodeerde header en payload, met „.” aan elkaar gevoegd, met een HMAC met een gedeelde geheime sleutel of met de privésleutel van publieke-sleutelcryptografie.

Hoe de server het token controleert

Een server die een JWT ontvangt, controleert met de sleutel of de handtekening geldig is, en controleert of claims zoals de vervaltijd en de doelgroep (aud) aan zijn voorwaarden voldoen. Het is belangrijk de waarde alg in de header niet zomaar te vertrouwen, maar alleen de algoritmen te accepteren die aan de kant van de server zijn vastgelegd. Na controle van de handtekening kan de server bepalen aan wie het token is uitgegeven, zonder sessie-informatie op te slaan.

Aandachtspunten

Omdat een JWT na uitgifte moeilijk in te trekken is, krijgt het gewoonlijk een korte vervaltijd en wordt het voor langer gebruik opnieuw uitgegeven met een aparte waarde die voor vernieuwing dient. Iedereen kan de payload lezen, dus er wordt geen geheime informatie in gezet. Afhankelijk van waar het token in de browser wordt bewaard, kan het via XSS worden gestolen.

Nu oefenen: vragen over JWT (JSON Web Token)

Welke beschrijving van een typische ondertekende JWT (JSON Web Token) is juist?

  1. ADe payload is versleuteld met de ondertekeningssleutel, dus wachtwoorden of creditcardnummers die erin staan, kunnen onderweg niet worden gelezen
  2. BOok na het verlopen van een token moet de server die accepteren zolang de handtekening geldig is, omdat er niet mee is geknoeid
  3. CZe bestaat uit een header, een payload en een handtekening, elk met Base64URL gecodeerd en met „.” aan elkaar gevoegd; de handtekening detecteert manipulatie, maar de inhoud is niet versleuteld
Antwoord en toelichting tonen

Antwoord: C. Ze bestaat uit een header, een payload en een handtekening, elk met Base64URL gecodeerd en met „.” aan elkaar gevoegd; de handtekening detecteert manipulatie, maar de inhoud is niet versleuteld

Een JWT bestaat uit drie delen, „header.payload.handtekening”: de header bevat het ondertekeningsalgoritme (bijvoorbeeld HS256), en de payload bevat informatie (claims) zoals de identificatie van de gebruiker en de vervaltijd (exp). De handtekening wordt met een geheime sleutel uit de header en de payload gemaakt, zodat een server die het token ontvangt, kan controleren dat er niet met de inhoud is geknoeid en wie het heeft uitgegeven. Base64URL is echter geen versleuteling: iedereen kan het decoderen en lezen, dus er wordt geen geheime informatie in gezet. Bij verzending naar een API wordt het token in het algemeen na Authorization: Bearer geplaatst.

Veelgestelde vragen

Moet ik een JWT of een sessie-ID gebruiken?

Een sessie-ID is alleen een sleutel om op de server opgeslagen informatie op te zoeken, zodat uitloggen en ongeldig maken aan de kant van de server direct effect hebben. Een JWT kan worden gecontroleerd zonder informatie op de server op te slaan, wat geschikt is om het tussen meerdere diensten door te geven, maar het heeft als zwakte dat het moeilijk in te trekken is. Voor het inloggen op één website is een sessie-ID vaak eenvoudiger.

Wat is het verschil tussen Base64URL en Base64?

Base64URL is een variant van Base64 die „+” en „/”, die in URL's een speciale betekenis hebben, vervangt door „-” en „_”, en vaak de afsluitende „=” weglaat. JWT's gebruiken deze vorm, zodat ze ongewijzigd in URL's en HTTP-headers kunnen worden gezet. Geen van beide is versleuteling; iedereen kan ze decoderen.

“JWT (JSON Web Token)” in de toelichting

Vragen met “JWT (JSON Web Token)” (2)

  1. Welke beschrijving van een typische ondertekende JWT (JSON Web Token) is juist?
  2. Welke beschrijving van de relatie tussen OAuth 2.0 en OpenID Connect is juist?

Verwante termen

OAuth Cookie (HTTP-cookie) CORS (cross-origin resource sharing) DOM (Document Object Model) Event loop HTTP (Hypertext Transfer Protocol) HTTP-methode HTTP-statuscode JSON (JavaScript Object Notation) REST-API

Naar de woordenlijst