web-dev-qa-db-fra.com

Dois-je envoyer explicitement le jeton d'actualisation pour obtenir un nouveau jeton d'accès - JWT

Dans mon application, je renvoie un jeton d'accès et un jeton d'actualisation lorsqu'un utilisateur se connecte avec succès. Les délais d'expiration pour le jeton d'accès et d'actualisation ont été définis respectivement sur 10 et 40 minutes. (Je devrais faire plus de recherche sur ces valeurs. C'est juste pour tester)

J'ai utilisé l'implémentation décrite dans l'article suivant

http://www.svlada.com/jwt-token-authentication-with-spring-boot/

Supposons que j'appelle une demande au serveur après 10 minutes de connexion. Comme le jeton d'accès a expiré, je reçois une réponse d'erreur 401.

Cependant, en tant que débutant, j'ai du mal à comprendre si j'ai besoin d'envoyer le jeton d'actualisation explicitement afin d'obtenir un nouveau jeton d'accès. Si je devais le faire, comment faire? Je devrais envoyer le jeton d'actualisation comme quoi? un en-tête?

Ou bien, lorsque ma demande est rejetée par le serveur car le jeton d'accès est expiré, le jeton d'actualisation lui-même doit-il envoyer automatiquement une demande au serveur afin d'obtenir un nouveau jeton d'accès?

J'ai eu du mal à comprendre la nature du comportement du jeton d'actualisation à partir des ressources que j'ai trouvées sur le net. Veuillez me clarifier ces questions.

14
vigamage

Oui, le jeton d'actualisation est utilisé pour obtenir un nouveau jeton d'accès.

Lorsque vous demandez le jeton d'accès pour la première fois, vous commencez généralement par envoyer une demande de jeton au point de terminaison du jeton, dans le cas de ce qu'on appelle Resource Owner Password Credentials Grant avec les informations d'identification de l'utilisateur dans l'en-tête de la demande, par exemple.

grant_type=password&username=user1&passowrd=very_secret

lorsque le jeton d'accès est expiré, vous devez demander un nouveau jeton d'accès. Cette fois, avec un jeton d'actualisation toujours valide, vous n'avez plus besoin des informations d'identification de l'utilisateur mais envoyez

grant_type=refresh_token&refresh_token=<your refresh token>

au lieu. De cette façon, vous n'avez pas besoin de stocker les informations d'identification de l'utilisateur côté client et vous n'avez pas besoin de déranger à nouveau l'utilisateur avec une procédure de connexion. Comme vous connaissez l'heure d'expiration, vous pouvez également implémenter un mécanisme pour actualiser votre jeton avant l'expiration du access_token.

De plus, vous pouvez lire ceci pour plus d'informations sur le sujet: https://auth0.com/learn/refresh-tokens/

Dans le didacticiel suivant, vous trouverez également une capture d'écran de l'utilisation du jeton d'actualisation dans Postman: http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp -net-web-api-2-owin / (faites défiler jusqu'à l'étape 6) En général, je peux recommander la lecture du tutoriel de Taiseer Joudeh, en particulier. pour C #, ASP.NET uand Angular programmers.

11
jps