2013-01-05 14 views
5

Właśnie zaktualizowałem nasz kod Box do OAuth2.Token odświeżania OAuth2 ważny tylko przez 14 dni

Zaimplementowaliśmy kod, który umożliwia użytkownikom przesyłanie plików między naszym serwerem internetowym a kontami Box (a także SkyDrive, Dropbox, Google Drive). Dostęp użytkowników i odświeżanie tokenów są przechowywane na naszym serwerze bazy danych.

Zgodnie http://developers.box.com/oauth/, mówi Każde odświeżenie tokena jest ważny przez 60 dni

Zarówno SkyDrive i Napęd używać OAuth2, i nie mają odświeżania tokena wygaśnięcia. Czy możliwe jest posiadanie żetonów odświeżających, które nie wygasają?

Niektóre aplikacje mogą nie wymagać odświeżania tokenów, więc czy rozważasz wprowadzenie nowych zakresów OAuth2, np.

  1. box.read
  2. box.read_write
  3. box.offline_access

Odpowiedz

14

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.

+0

Już zapisuję nowy token odświeżania dla każdego żądania. – MikeLim

+1

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

+0

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

2

Dzięki za wejście i okna się nie zmieniło, jak traktujemy odświeżania tokeny na podstawie tej informacji zwrotnej, jak również kilka szczegółowych dyskusji z niektórymi z naszych programistów partnerskimi i klientami.

Pudełko przeniesiono z 14 dni na 60 dni. To samo w sobie powinno zmniejszyć liczbę użytkowników, którzy przekroczyli limit czasu, ponad to, czego większość twórców aplikacji chce dla swoich aplikacji.

Zapewniamy również, co najważniejsze, że kiedy wystąpi ten błąd sieci, nie unieważniamy tokena odświeżania, gdy tylko wydamy nowy. Jeśli z jakiegoś powodu nie otrzymasz nowego tokena odświeżania, po prostu oddzwoń, aby uzyskać nowy ze starym tokenem odświeżania. Możesz to zrobić tyle razy, ile chcesz, aż otrzymasz nowy token dostępu i token odświeżania.

Po udanym połączeniu z nowym tokenem dostępu wiemy, że masz nową parę i unieważniamy stary token odświeżania. Pomaga to również w działaniu środowiskom z wieloma serwerami, ponieważ jednoczesne żądanie uzyskania nowego RT działa z wielu serwerów w klastrze.

Powiązane problemy