Jak rozumiem, realizacja Box OAuth2 używa opcjonalnego odświeżania schemat rotacji żeton, gdzie każdy razem, gdy wydano token dostępu, wydano także nowy token odświeżania. Zobacz rozdział 10.4 z oauth spec document. Jest to opcjonalna funkcja, której Google i Microsoft nie używają, ponieważ wydają trwałe tokeny odświeżania dla implementacji OAuth2 (lub przynajmniej odświeżają tokeny o wystarczająco długim czasie życia, więc to naprawdę nie jest problem).
Jest to, moim skromnym zdaniem, bardzo niefortunny wybór w części Box.
To, co musisz zrobić w swoich aplikacjach, to, że za każdym razem, gdy poprosisz o nowy token dostępu, musisz również zapisać nowy token odświeżania, dzięki czemu użyjesz nowego tokena odświeżania, gdy następnym razem poprosisz o dostęp do tokena. W ten sposób jedynym scenariuszem, w którym zakończy się posiadanie wygasłego tokena odświeżania, jest sytuacja, w której użytkownik nie będzie używał loginu Box przez 60 dni. Dopóki aktywnie korzystają z aplikacji, otrzymasz nowe tokeny odświeżania, a 60-dniowy cykl życia nie jest problemem. Jak dotąd tak dobrze, ale to nie zawsze tak działa, prawda?
Mój problem polega na tym, że musisz zapisać token odświeżania na każdym żądaniu, ale co jeśli to się nie powiedzie z jakiegoś powodu: Jest to awaria sieci, linie baterii baterii, jest wyjątek zapisu dysku, twoja aplikacja zostanie zamknięty przez system operacyjny .... wtedy będziesz musiał zażądać, aby użytkownik zalogował się ponownie, a użytkownik będzie winił twórcę aplikacji.
I to się wydarzy, jeśli masz wystarczającą ilość użytkowników korzystających z aplikacji. Może tylko z czasem 2-5%, ale moim zdaniem nadal jest to ogromny problem.
Przynajmniej jeśli token odświeżania był (semi) -permanent, można ponowić proces uwierzytelniania, dopóki nie został zakończony. Wtedy wiedziałeś, że masz zapisany token i możesz go nadal używać, także w przypadku prób, gdy powyższe scenariusze się zdarzają, ale nie w przypadku schematu rotacji.
Jestem już myśli o dokonanie standardowego maila wsparcia dla moich użytkowników, którzy doświadczają tego problemu, z linkami do tej kwestii.
Już zapisuję nowy token odświeżania dla każdego żądania. – MikeLim
To jest aplikacja internetowa, a tokeny są przechowywane w naszym serwerze baz danych, więc ryzyko przerw w dostawie jest nieco mniejsze. Mam OK z odświeżaniem schematu obracania żetonów; jest nieco bezpieczniejszy. Wolałbym jednak odświeżać token z dostatecznie długą żywotnością. – MikeLim
Ja też, ale mam nadzieję, że moja odpowiedź była dla ciebie wciąż przydatna. Przechowuję także token żądania w bazie danych na każde żądanie, ale na urządzeniu mobilnym, a z mojego doświadczenia wynika, że wiele rzeczy może się nie udać, że nie mogę ich kontrolować. – AndersC