image
image
image
image
image
image

Le jeton daccès a expiré

Lorsque

vous avez initialement reçu le jeton d’accès, il se peut qu’il ait inclus un jeton d’actualisation ainsi qu’un délai d’expiration, comme dans l’exemple ci-dessous.

{ « access_token » : « AYjcyMzY3ZDhiNmJkNTY », « refresh_token » : « RjY2NjM5NzA2OWJjuE7c », « token_type » : « porteur », « expire » : 3600 }

La présence du jeton d’actualisation signifie que le jeton d’accès expirera et que vous pourrez en obtenir un nouveau sans interaction de l’utilisateur.

La valeur « expires_in » est le nombre de secondes pendant lesquelles le jeton d’accès sera valide. C’est au service que vous utilisez de décider de la durée de validité des jetons d’accès, et cela peut dépendre de l’application ou des politiques de l’organisation. Vous pouvez utiliser cet horodatage pour actualiser de manière préventive vos jetons d’accès au lieu d’attendre un Échec de la demande avec un jeton expiré. Certaines personnes aiment obtenir un nouveau jeton d’accès peu de temps avant l’expiration de l’actuel afin d’éviter l’échec d’une requête HTTP d’un appel d’API. Bien qu’il s’agisse d’une optimisation parfaitement correcte, cela ne vous empêche pas de devoir gérer le cas où un appel d’API échoue si un jeton d’accès expire avant l’heure prévue. Les jetons d’accès peuvent expirer pour de nombreuses raisons, par exemple si l’utilisateur révoque une application ou, si le serveur d’autorisation fait expirer tous les jetons lorsqu’un utilisateur modifie son mot de passe.

Si vous effectuez une requête API et que le jeton a déjà expiré, vous recevrez une réponse l’indiquant. Vous pouvez vérifier ce message d’erreur spécifique, puis actualiser le jeton et réessayer la demande.

Si vous utilisez une API basée sur JSON, elle renverra probablement une réponse d’erreur JSON avec l’erreur. Dans tous les cas, l’en-tête aura également le code d’erreur.

HTTP/1.1 401 WWW-Authenticate : Bearer error="invalid_token » error_description="Le jeton d’accès a expiré » Content-type : application/json { « error » : « invalid_token », « error_description » : « Le jeton d’accès a expiré » }

Lorsque votre application reconnaît cette erreur spécifique, elle peut alors effectuer une requête au point de terminaison du jeton en utilisant le jeton d’actualisation qu’elle a précédemment reçu, et récupérera un nouveau jeton d’accès qu’il pourra utiliser pour réessayer la demande d’origine.

Pour utiliser le jeton d’actualisation, effectuez une requête POST au point de terminaison du jeton du service avec , et incluez le jeton d’actualisation ainsi que les informations d’identification du client si nécessaire.

POST /oauth/token HTTP/1.1 Hôte : authorization-server.com grant_type=refresh_token &refresh_token=xxxxxxxxxxx &client_id=xxxxxxxxxx &client_secret=xxxxxxxxxx

La réponse sera un nouveau jeton d’accès, et éventuellement un nouveau jeton d’actualisation, tout comme celui que vous avez reçu lors de l’échange du code d’autorisation contre un jeton d’accès.

{ « access_token » : « BWjcyMzY3ZDhiNmJkNTY », « refresh_token » : « Srq2NjM5NzA2OWJjuE7c », « token_type » : « Bearer », « expire » : 3600 }

Si vous ne récupérez pas un nouveau jeton d’actualisation, cela signifie que votre jeton d’actualisation existant continuera à fonctionner lorsque le nouveau jeton d’accès expirera.

L’option la plus sûre consiste pour le serveur d’autorisation à émettre un nouveau jeton d’actualisation chaque fois qu’il est utilisé. Il s’agit de la recommandation de la dernière bonne pratique de sécurité actuelle, qui permet aux serveurs d’autorisation de détecter si un jeton d’actualisation est volé. Ceci est particulièrement important pour les clients qui n’ont pas de clé secrète client, car le jeton d’actualisation devient la seule chose nécessaire pour obtenir de nouveaux jetons d’accès.

Lorsque le jeton d’actualisation change après chaque utilisation, si le Le serveur d’autorisation détecte qu’un jeton d’actualisation a été utilisé deux fois, ce qui signifie qu’il a probablement été copié et qu’il est utilisé par un attaquant, et que le serveur d’autorisation peut révoquer immédiatement tous les jetons d’accès et les jetons d’actualisation qui lui sont associés.

Gardez à l’esprit qu’à tout moment, l’utilisateur peut révoquer une application, de sorte que votre application doit être en mesure de gérer le cas où l’utilisation du jeton d’actualisation échoue également. À ce stade, vous devrez à nouveau demander l’autorisation à l’utilisateur, en commençant un nouveau flux OAuth à partir de zéro.

Vous remarquerez peut-être que la propriété « expires_in » fait référence au jeton d’accès, et non au jeton d’actualisation. L’heure d’expiration du jeton d’actualisation n’est intentionnellement jamais communiquée au client. En effet, le client ne dispose d’aucune action qu’il peut prendre, même s’il était en mesure de savoir quand le jeton d’actualisation expirerait. Il existe également de nombreuses raisons pour lesquelles les jetons d’actualisation peuvent expirer avant toute durée de vie prévue d’eux également.

Si un jeton d’actualisation expire pour une raison quelconque, la seule action que l’application peut effectuer est de demander à l’utilisateur de se reconnecter, en démarrant un nouveau flux OAuth à partir de zéro, ce qui émettra un nouveau jeton d’accès et un jeton d’actualisation à l’application. C’est la raison pour laquelle il n’est pas important que l’application connaisse la durée de vie prévue du jeton d’actualisation, car quelle que soit la raison pour laquelle il expire, le résultat est toujours le même.