OAuth 2.0: JWT token en claims

Gepubliceerd op 30 juni 2019Leestijd: 3 minuten

In mijn vorige blog heb ik uitgelegd hoe OAuth 2.0 ervoor kan zorgen dat derde partijen op een veilige manier gebruik kunnen maken van jouw applicatie met behulp van tokens. In deze blog gaan we wat meer inzoomen op specifieke functionaliteit van OAuth 2.

Zoals eerder besproken werkt OAuth 2.0 met een toegangstoken. Deze tokens hebben een JSON Web Token (JWT) format. Het JWT token bestaat uit 3 delen gescheiden door drie punten (.). Vaak ziet een token er ongeveer als volgt uit: xxxxx.yyyyy.zzzzz. De drie verschillende delen zijn als volgt:

  1. De header: bestaat vaak uit 2 onderdelen, het type token (vaak JWT) en het versleutel algoritme dat gebruikt is om het token te versleutelen, zoals HMAC SHA256.
     
  2. De payload: bevat informatie over de gebruiker van het token, zoals claims en permissies. Deze zijn voor iedereen inzichtelijk dus let erop dat je hier geen gevoelige informatie inzet. Ook is een JWT token erop gemaakt om kort en compact te zijn dus denk aan de lengte van de namen van de claims die je aan het token toevoegt.
     
  3. De signature: wordt gebruikt om te valideren dat het token vertrouwenswaardig en veilig is.

Het token bevat informatie over de gebruiker en het token zelf. Deze informatie wordt versleuteld met een sleutel welke bij de zender en de ontvanger bekend zijn. Hierdoor kunnen beide partijen nagaan of het token legitiem is.

Bovenstaande delen worden elk  versleuteld door gebruik te maken van Base64Url encodering. Op de deze website kun je een token terugvertalen naar leesbare informatie en kun je precies zien uit welke 3 delen het token bestaat.

Doordat in de payload van het toegangstoken informatie staat over de claims en permissies van de gebruiker, kan de applicatie in het token uitlezen of een gebruiker wel recht heeft om een bepaald HTML endpoint aan te roepen.

Zo bevat een JWT token de volgende gereserveerde claims. Deze claims zijn optioneel:

Code

Naam

Omschrijving

iss

Issuer

Naam van de uitgever van het token

sub

Subject

De gebruiker van het token

aud

Audience

De ontvangers voor wie het token is bedoeld

exp

Expiration time

Geeft aan wanneer de geldigheid van het token verloopt

nbf

Not before time

Voor deze tijd is het toegangstoken niet geldig

iat

Issued at time

De uitgiftedatum van het token

jti

JWT ID

Unieke waarde waarmee het token geïdentificeerd kan worden, wat ervoor zorgt dat het token eenmalig gebruikt kan worden (totdat de geldigheid verstrijkt)

 

De volgende claims zijn te vinden in de header van het token:

Code

Naam

Omschrijving

typ

Type

Het typen token, vaak JWT

cty

Content type

Het wordt aangeraden hier ook JWT in te zetten

alg

Algorithm

Het algoritme gebruikt om het token te versleutelen.

 

Naast deze claims kan je zelf ook eigen claims toevoegen. Hier kun je publieke of privé claims toevoegen.

Publieke claims zijn voor iedereen zichtbaar en bevatten vaak generieke informatie, zoals een naam of e-mailadres. Let hier wel op de naamgeving, welke uniek moet zijn. Je kunt een publieke claim prefixen met bijvoorbeeld de naam van je applicatie.

Privé claims bevatten informatie die alleen geldt voor jouw applicatie, zoals bepaalde rollen voor een gebruiker. Ook hier geldt weer dat de naam uniek moet zijn en geen conflicten moet opleveren met bijvoorbeeld de gereserveerde claims.

Meer lezen over JWT tokens en claims?