Czy tokeny odświeżania Google wygasają?

109

Użyłem tokena odświeżania kilka razy w krótkim okresie do celów testowych, ale zastanawiam się, czy tokeny odświeżania Google kiedykolwiek wygasają? Czy mogę użyć tego samego tokena odświeżania, aby wielokrotnie otrzymywać kolejny token dostępu przez długi okres (tydzień lub nawet miesiące)?

Robin Carlo Catacutan
źródło
używasz ruby, czy masz do tego przykładowy kod?
Thufir

Odpowiedzi:

148

Wydane przez serwer Google Auth tokeny odświeżania nigdy nie tracą ważności - o to właśnie chodzi w tokenach odświeżania. Token odświeżania wygaśnie (lub powinienem powiedzieć, że stanie się nieautoryzowany), gdy użytkownik cofnie dostęp do twojej aplikacji.

Zapoznaj się z tym dokumentem, w którym jasno określono funkcję tokenów odświeżania.

Zamiast wydawać długotrwały token (zazwyczaj ważny przez rok lub nieograniczony okres eksploatacji), serwer może wystawić krótkotrwały token dostępu i długotrwały token odświeżania. Krótko mówiąc, możesz wielokrotnie używać tokenów odświeżania, dopóki użytkownik, który autoryzował dostęp, nie cofnie dostępu do Twojej aplikacji.

Cień
źródło
6
Część „dobra na rok” sprawia, że ​​nie jest to tak jasne, jak sugerujesz; ale ponieważ nie wydaje się to powodować problemów w praktyce, zakładam, że token odświeżania jest wiecznie zielony.
mahemoff
54
Wygaśnięcie tokena Należy napisać kod, aby przewidzieć możliwość, że przyznany token może przestać działać. Token może przestać działać z jednego z następujących powodów: Użytkownik unieważnił dostęp. Token nie był używany przez sześć miesięcy. Konto użytkownika przekroczyło określoną liczbę żądań tokenów. Obecnie istnieje limit 25 tokenów na konto użytkownika Google. Jeśli konto użytkownika ma 25 ważnych tokenów, następne żądanie uwierzytelnienia powiedzie się, ale po cichu unieważnia najstarszy oczekujący token bez żadnego widocznego dla użytkownika ostrzeżenia. (z developers.google.com/accounts/docs/OAuth2 )
bazik
17
„długotrwały” odświeżający token to coś innego niż „nigdy nie wygasa”.
Kapé
1
Jak więc twój kod może sprawdzić, czy token odświeżania jest nadal ważny?
SsjCosty
3
@Shadow Jeśli token odświeżania rzadko wygasa, jak sugerowano, dlaczego Google nie wydaje po prostu nie wygasającego tokena dostępu, w pierwszej kolejności. O ile rozumiem, token dostępu wystawiony przy użyciu protokołu OAuth 2.0 może następnie zostać użyty do zażądania tokenu odświeżania. Dlaczego nie mieć po prostu stałego tokena dostępu i odciąć dodatkowe wywołanie tokena odświeżania.
Charles Robertson
62

To bardzo zagmatwany wątek. Pierwsza odpowiedź wydaje się być poprawna, ale tak naprawdę nie cytuje niczego autorytatywnego z Google.

Najbardziej ostateczna odpowiedź, jaką znalazłem, znajduje się na placu zabaw dewelopera, gdzie uzyskujesz token. Krok 2 ma na dole notatkę, która mówi:

„Uwaga: OAuth Playground nie przechowuje tokenów odświeżania, ale ponieważ tokeny odświeżania nigdy nie wygasają, użytkownik powinien przejść do strony autoryzowanego dostępu do konta Google, jeśli chce je ręcznie unieważnić”.

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

Josh Hunter
źródło
2
najlepsza odpowiedź tutaj - dlaczego nikt nie zagłosował za, jest niewiarygodne - wielkie dzięki - traktuj tokeny odświeżania tak, jakby nigdy nie wygasały - jednak po zalogowaniu sprawdź, czy nie ma nowego na wypadek, gdyby użytkownik unieważnił token odświeżania, w tym scenariuszu Google dostarczy nowy token odświeżania przy logowaniu, więc po prostu zaktualizuj token odświeżania
danday74
14

Nie sądzę, żeby to była do końca prawda:

Zwróć uwagę, że istnieją ograniczenia liczby tokenów odświeżania, które zostaną wydane; jeden limit na kombinację klienta / użytkownika i inny na użytkownika dla wszystkich klientów. Należy zapisać tokeny odświeżania w długoterminowym magazynie i nadal z nich korzystać, dopóki pozostają ważne. Jeśli aplikacja zażąda zbyt wielu tokenów odświeżania, może napotkać te limity, w którym to przypadku starsze tokeny odświeżania przestaną działać.

z tej strony: https://developers.google.com/youtube/v3/guides/authentication#installed-apps

To pochodzi z dokumentów YouTube (które uważam za znacznie lepsze niż inne dokumenty API), ale myślę, że jest tak samo we wszystkich aplikacjach Google.

Roaders
źródło
5

Zasady uległy zmianie gdzieś w 2017 roku, więc myślę, że najlepszą odpowiedzią jest to, że zależy to od produktu. Na przykład w interfejsie Gmail API token odświeżania Oauth 2.0 wygasa po zmianie hasła. Zobacz https://support.google.com/a/answer/6328616?hl=en

Kiedyś konfigurowaliśmy dostęp do API z wyprzedzeniem i generowaliśmy tokeny odświeżania, kiedy konfigurowaliśmy NOWYCH użytkowników Gmaila, a potem mogliśmy archiwizować ich pocztę (jesteśmy do tego zobowiązani przez prawo), ale teraz, gdy tylko zmienią hasło, odśwież token jest unieważniony.

Być może w przypadku youtube, map, token odświeżania jest nadal naprawdę długowieczny, ale w przypadku interfejsu API Gmaila można liczyć na krótki token.

TonyE
źródło
Wygląda na to, że oficjalnie stało się to 5 października 2016 r. Developers.googleblog.com/2016/09/…
TonyE
2

Główną koncepcją odświeżającego tokena jest to, że jest długotrwały i nigdy nie wygasa.

Token dostępu ma czas wygaśnięcia i wygasa, po wygaśnięciu możemy przejść po token odświeżania, który będzie używany wielokrotnie, dopóki użytkownik nie odwoła się ze swojego konta.

Shiven Ojha
źródło
0

Przeczytaj to z: https://developers.google.com/identity/protocols/oauth2#expiration Musisz napisać swój kod, aby przewidzieć możliwość, że przyznany token odświeżania może przestać działać. Token odświeżania może przestać działać z jednego z następujących powodów:

Użytkownik unieważnił dostęp Twojej aplikacji. Token odświeżania nie był używany przez sześć miesięcy. Użytkownik zmienił hasła, a token odświeżania zawiera zakresy Gmaila. Konto użytkownika przekroczyło maksymalną liczbę przyznanych (aktywnych) tokenów odświeżania. Obecnie istnieje limit 50 tokenów odświeżania na konto użytkownika na klienta. Jeśli limit zostanie osiągnięty, utworzenie nowego tokena odświeżania automatycznie unieważnia najstarszy token odświeżania bez ostrzeżenia. Ten limit nie dotyczy kont usług.

Istnieje również większy limit całkowitej liczby tokenów odświeżania, które konto użytkownika lub konto usługi może mieć na wszystkich klientach. Większość zwykłych użytkowników nie przekroczy tego limitu, ale konto testowe programisty może.

Jos Luijten
źródło
-2

Zrobiłem dalsze badania i wydaje się, że token dostępu Google jest używany do pobierania tokena odświeżania podczas pierwszego żądania „offline”. Od tego momentu token odświeżania jest używany do wystawiania nowego tokenu dostępu. Chodzi o to, że token dostępu jest tokenem krótkoterminowym, ale można go odnowić za pomocą tokenu długoterminowego odświeżania. Eliminuje to konieczność żądania zmiennej „kod” adresu URL, która wymaga podejścia z dwoma punktami końcowymi i musi zostać zainicjowana przy użyciu żądania opartego na stronie odsyłającej:

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

Niektóre usługi REST API, takie jak Dropbox, wydają tokeny dostępu, które są wieczne, ale Google wydaje tokeny dostępu krótkoterminowego. PayPal używa kompromisu, dzięki czemu umożliwia pobieranie tokenów dostępu bez wymuszania odsyłacza URI. Oznacza to, że tokeny dostępu można odzyskać bez konieczności klikania łącza w celu zainicjowania procesu. Metodologia Google oznacza, że ​​procedury API powinny być wywoływane tylko wtedy, gdy są potrzebne. Zasadniczo połączenia są inicjowane za pomocą procedur opartych na odsyłaczach. Jest to kontrolowane przez wydawanie krótkotrwałych tokenów dostępu lub tokenów dostępu, które muszą być odświeżane w łańcuchu. Wymaga to od programistów dokładniejszego przemyślenia sposobu, w jaki powinien działać system.

Charles Robertson
źródło