Les jetons d'actualisation Google expirent-ils?

109

J'ai utilisé le jeton d'actualisation plusieurs fois en une courte période à des fins de test, mais je me demande si les jetons d'actualisation Google expirent un jour? Puis-je utiliser le même jeton d'actualisation pour obtenir un autre jeton d'accès encore et encore pendant une longue période (une semaine, voire des mois)?

Robin Carlo Catacutan
la source
utilisez-vous ruby ​​ou avez-vous un exemple de code pour cela?
Thufir

Réponses:

147

Les jetons d'actualisation émis par le serveur Google Auth n'expirent jamais - c'est tout l'intérêt des jetons d'actualisation. Le jeton d'actualisation expirera (ou je devrais dire devenir non autorisé) lorsque l'utilisateur révoque l'accès à votre application.

Reportez-vous à ce document, il indique clairement la fonction des jetons d'actualisation.

Au lieu d'émettre un jeton de longue durée (généralement valable un an ou une durée de vie illimitée), le serveur peut émettre un jeton d'accès de courte durée et un jeton d'actualisation de longue durée. En bref, vous pouvez utiliser des jetons d'actualisation encore et encore jusqu'à ce que l'utilisateur qui a autorisé l'accès révoque l'accès à votre application.

Ombre
la source
6
La partie «bon pour un an» ne le rend pas aussi clair que vous le suggérez; mais comme cela ne semble pas poser de problèmes dans la pratique, je suppose que le jeton d'actualisation est toujours vert.
mahemoff
54
Expiration du jeton Vous devez écrire votre code pour anticiper la possibilité qu'un jeton accordé ne fonctionne plus. Un jeton peut cesser de fonctionner pour l'une des raisons suivantes: L'utilisateur a révoqué l'accès. Le jeton n'a pas été utilisé depuis six mois. Le compte utilisateur a dépassé un certain nombre de demandes de jetons. Il existe actuellement une limite de 25 jetons par compte utilisateur Google. Si un compte d'utilisateur a 25 jetons valides, la demande d'authentification suivante réussit, mais invalide discrètement le jeton en attente le plus ancien sans aucun avertissement visible par l'utilisateur. (de developer.google.com/accounts/docs/OAuth2 )
bazik
17
Le jeton d'actualisation «longue durée» est différent de «ne jamais expirer».
Kapé
1
Alors, comment votre code peut-il vérifier si votre jeton d'actualisation est toujours valide?
SsjCosty
3
@Shadow Si le jeton d'actualisation expire rarement, comme suggéré, pourquoi Google ne délivre-t-il pas simplement un jeton d'accès non expirant, en premier lieu. Pour autant que je sache, le jeton d'accès émis à l'aide d'oAuth 2.0 peut ensuite être utilisé pour demander un jeton d'actualisation. Pourquoi ne pas simplement avoir un jeton d'accès permanent et couper l'appel supplémentaire pour le jeton d'actualisation.
Charles Robertson
62

C'est un fil très déroutant. La première réponse semble correcte, mais ne cite en fait rien d'autorité de Google.

La réponse la plus définitive que j'ai trouvée se trouve en fait dans le terrain de jeu du développeur où vous obtenez le jeton. L'étape 2 a une note en bas qui dit:

"Remarque: OAuth Playground ne stocke pas les jetons d'actualisation, mais comme les jetons d'actualisation n'expirent jamais, l'utilisateur doit accéder à la page d'accès autorisé de son compte Google s'il souhaite les révoquer manuellement."

https://developers.google.com/oauthplayground/

Josh Hunter
la source
2
meilleure réponse ici - pourquoi personne n'a voté positivement est incroyable - merci beaucoup - traitez les jetons d'actualisation comme s'ils n'expiraient jamais - cependant, lors de la connexion, vérifiez-en un nouveau au cas où l'utilisateur révoquerait le jeton d'actualisation, dans ce scénario, Google fournira un nouveau jeton d'actualisation à la connexion, mettez simplement à jour le jeton d'actualisation
danday74
14

Je ne pense pas que ce soit complètement vrai:

Notez qu'il existe des limites sur le nombre de jetons d'actualisation qui seront émis; une limite par combinaison client / utilisateur et une autre par utilisateur pour tous les clients. Vous devez enregistrer les jetons d'actualisation dans un stockage à long terme et continuer à les utiliser tant qu'ils restent valides. Si votre application demande trop de jetons d'actualisation, elle peut rencontrer ces limites, auquel cas les jetons d'actualisation plus anciens cesseront de fonctionner.

depuis cette page: https://developers.google.com/youtube/v3/guides/authentication#installed-apps

Cela provient des documents YouTube (que je trouve bien meilleurs que les autres documents api), mais je pense que c'est la même chose dans toutes les applications Google.

Roaders
la source
5

regarde ça:

Les jetons d'actualisation sont valides jusqu'à ce que l'utilisateur révoque l'accès. Ce champ n'est présent que si access_type = offline est inclus dans la demande de code d'autorisation.

dans https://developers.google.com/accounts/docs/OAuth2WebServer

Karl
la source
5

Les règles ont changé à ce sujet en 2017, donc la meilleure réponse à mon avis est que cela dépend du produit. Par exemple, sur l'API Gmail, le jeton d'actualisation Oauth 2.0 expire lors du changement de mot de passe. Voir ceci https://support.google.com/a/answer/6328616?hl=en

Nous avions l'habitude de configurer l'accès aux API à l'avance et de générer des jetons d'actualisation lorsque nous configurions de NOUVEAUX utilisateurs de gmail, puis nous pouvions archiver leur courrier (nous sommes tenus de le faire par la loi), mais maintenant, dès qu'ils changent de mot de passe, le jeton d'actualisation est révoqué.

Peut-être que pour YouTube, les cartes, le jeton d'actualisation dure encore longtemps, mais pour l'api gmail, comptez sur un jeton court.

TonyE
la source
On dirait qu'il est devenu officiel le 5 octobre 2016. developer.googleblog.com/2016/09/…
TonyE
2

Le concept principal du jeton d'actualisation est qu'il dure longtemps et n'expire jamais.

Le jeton d'accès a un délai d'expiration et il expire, une fois qu'il expire, nous pouvons aller chercher le jeton d'actualisation, qui sera utilisé encore et encore jusqu'à ce que l'utilisateur révoque son compte.

Shiven Ojha
la source
0

Lisez ceci sur: https://developers.google.com/identity/protocols/oauth2#expiration Vous devez écrire votre code pour anticiper la possibilité qu'un jeton d'actualisation accordé ne fonctionne plus. Un jeton d'actualisation peut cesser de fonctionner pour l'une des raisons suivantes:

L'utilisateur a révoqué l'accès à votre application. Le jeton d'actualisation n'a pas été utilisé depuis six mois. L'utilisateur a modifié les mots de passe et le jeton d'actualisation contient des champs d'application Gmail. Le compte d'utilisateur a dépassé le nombre maximal de jetons d'actualisation accordés (en direct). Il existe actuellement une limite de 50 jetons d'actualisation par compte d'utilisateur et par client. Si la limite est atteinte, la création d'un nouveau jeton d'actualisation invalide automatiquement le jeton d'actualisation le plus ancien sans avertissement. Cette limite ne s'applique pas aux comptes de service.

Il existe également une limite plus élevée sur le nombre total de jetons d'actualisation qu'un compte d'utilisateur ou un compte de service peut avoir sur tous les clients. La plupart des utilisateurs normaux ne dépasseront pas cette limite, mais le compte de test d'un développeur pourrait le faire.

Jos Luijten
la source
-2

J'ai fait quelques recherches supplémentaires et il semble que le jeton d'accès Google soit utilisé pour récupérer un jeton d'actualisation, lors de la première demande «hors ligne». À partir de ce moment, le jeton d'actualisation est utilisé pour émettre un nouveau jeton d'accès. L'idée est qu'un jeton d'accès est un jeton à court terme, mais il peut être renouvelé par un jeton d'actualisation à long terme. Cela supprime le besoin de demander la variable `` code '' de l'URL, qui nécessite une approche à deux points de terminaison et doit être initiée, à l'aide d'une requête basée sur le référent:

http://www.jensbits.com/2012/01/09/google-api-offline-access-using-oauth-2-0-refresh-token/

Certains services d'API REST comme Dropbox émettent des jetons d'accès qui durent éternellement, mais Google émet des jetons d'accès à court terme. PayPal utilise un compromis, par lequel il permet aux jetons d'accès d'être récupérés sans application de référent URI. Cela signifie que les jetons d'accès peuvent être récupérés sans avoir à cliquer sur un lien pour lancer le processus. La méthodologie de Google signifie que les routines d'API ne doivent être appelées qu'en cas de besoin. Essentiellement, les appels sont lancés via des procédures basées sur les référents. Ceci est contrôlé par l'émission de jetons d'accès de courte durée ou de jetons d'accès qui doivent être actualisés dans une chaîne. Cela oblige les développeurs à réfléchir plus attentivement à la manière dont un système doit fonctionner.

Charles Robertson
la source