Maîtriser l'acquisition d'Access Token : Utiliser un refresh token

Cet article fait partie d’une série. Dans celui-ci, nous mettons en avant l’utilisation d’un refresh token. Consultez les autres articles sur les autres flux d’autorisation :

Vous avez donc créé une application super sympa qui utilise le flux Authorization Code et obtenu un access token pour son utilisation. Mais que se passe-t-il si cet access token expire après une heure ? Allez-vous demander à l’utilisateur de reprendre tout le flux depuis le début pour obtenir un nouveau token ? Et ce toutes les heures ?

Heureusement, il existe ce qu’on appelle le refresh token. Un refresh token est un token qui est valide plus longtemps qu’un access token et est généralement valide pendant 90 jours. Vous ne pouvez pas utiliser un refresh token pour vous authentifier, mais vous pouvez l’utiliser pour demander un nouvel access token.

Un refresh token n’est pas donné par défaut, vous devez le demander explicitement en ajoutant offline_access au paramètre de scope dans le body. Ainsi, par exemple, si votre scope est https://graph.microsoft.com/.default, vous n’obtiendrez qu’un access token mais pas de refresh token. En changeant votre scope en https://graph.microsoft.com/.default offline_access, vous obtiendrez un access token et un refresh token. Mais sachez que tous les flux d’autorisation ne peuvent pas renvoyer un refresh token. Par exemple, le flux Authorization Code peut renvoyer un refresh token, mais le flux Client Credentials ne retournera pas de refresh token car vous pouvez obtenir votre access token directement en utilisant le client ID et le client secret.

Comment faire cela ? Nous pouvons le faire en effectuant une requête post vers l’endpoint token avec le body suivant :

  • client_id : L’identifiant de votre client, trouvable dans l’écran d’accueil de votre inscription d’application.
  • client_secret : Le client secret de votre client ID. Vous pouvez le générer dans la section Certificates & secrets de votre inscription d’application dans Azure.
  • grant_type : refresh_token
  • refresh_token : Le refresh token que vous avez obtenu lors de votre premier appel à l’endpoint token.
  • scope : Le scope doit être l’identifiant de ressource de l’application contre laquelle vous souhaitez utiliser votre access token, suivi de .default. Pour Microsoft Graph, ce serait par exemple https://graph.microsoft.com/.default. Notez que vous n’avez plus besoin d’ajouter offline_access à ce scope car le type d’appel à cet endpoint renvoie toujours un nouveau refresh token.

Si tout se passe bien, vous obtenez un json en retour qui contient votre access token et un nouveau refresh token :