Access Token verkrijgen onder de knie: Een refresh token gebruiken

Dit blogbericht maakt deel uit van een reeks. In dit bericht belichten we het gebruik van een refresh token. Bekijk de andere berichten over de andere autorisatiestromen:

Je hebt dus een coole, geweldige applicatie gemaakt die de authorization code flow gebruikt en een access token verkregen voor gebruik. Maar wat als dit access token na een uur verloopt? Ga je de gebruiker de hele stroom opnieuw laten doorlopen om een nieuw token te krijgen? En dit elk uur?

Gelukkig bestaat er zoiets als het refresh token. Een refresh token is een token dat langer geldig is dan een access token en is doorgaans 90 dagen geldig. Je kunt een refresh token niet gebruiken om te authenticeren, maar je kunt het wel gebruiken om een nieuw access token aan te vragen.

Een refresh token wordt niet standaard gegeven; je moet er expliciet om vragen door offline_access toe te voegen aan de scope-bodyparameter. Als je bereik bijvoorbeeld bestaat uit https://graph.microsoft.com/.default, krijg je alleen een access token maar geen refresh token. Door je bereik te wijzigen naar https://graph.microsoft.com/.default offline_access, krijg je zowel een access token als een refresh token terug. Maar houd er rekening mee dat niet elke autorisatiestroom een refresh token kan retourneren. Zo kan de authorization code flow een refresh token retourneren, maar de client credentials flow retourneert geen refresh token omdat je je access token direct kunt verkrijgen terwijl je client id en client secret gebruikt.

Hoe doen we dat? We kunnen dit doen door een post-verzoek te doen naar het token-endpoint met de volgende body:

  • client_id: de id van je client. Deze is te vinden op het startscherm van je app-registratie.
  • client_secret: Het client secret van je client-id. Dit is iets wat je kunt genereren in de sectie Certificates & secrets van je app-registratie in Azure.
  • grant_type: refresh_token
  • refresh_token: het refresh token dat je hebt verkregen bij je eerste aanroep naar het token-endpoint
  • scope: het bereik moet de resource-identifier zijn van de applicatie waartegen je je access token wilt gebruiken, aangevuld met .default. Voor Microsoft Graph zou dit bijvoorbeeld https://graph.microsoft.com/.default zijn. Let op: je hoeft offline_access niet meer aan dit bereik toe te voegen, omdat het type aanroep naar dit endpoint altijd een nieuw refresh token retourneert.

Als alles goed gaat, krijg je een json terug met daarin je access token en een nieuw refresh token: