2013-01-05 14 views
5

Ho appena aggiornato il codice della casella su OAuth2.Token di aggiornamento OAuth2 valido solo per 14 giorni

Abbiamo implementato il codice che consente agli utenti di trasferire file tra il nostro server web e i loro account Box (così come SkyDrive, Dropbox, Google Drive). I token di accesso e aggiornamento degli utenti sono memorizzati nel nostro server di database.

Come per http://developers.box.com/oauth/, si dice Ogni token di aggiornamento è valido per 60 giorni

Sia SkyDrive e guidare l'uso OAuth2, e non hanno di refresh scadenza token. È possibile avere token di aggiornamento senza scadenza?

Alcune applicazioni potrebbero non aver bisogno dei token di aggiornamento, quindi prenderei in considerazione l'introduzione di nuovi ambiti OAuth2, ad es.

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

risposta

14

A quanto mi risulta, l'attuazione Box OAuth2 utilizza lo schema di rotazione del token opzionale di aggiornamento, in cui ogni volta che un viene emesso un token di accesso, viene inoltre emesso un nuovo token di aggiornamento. Vedere la sezione 10.4 di oauth spec document. Si tratta di una funzionalità opzionale, che Google e Microsoft non utilizzano, poiché rilasciano token di aggiornamento permanenti per le implementazioni OAuth2 (o almeno aggiorna i token con una durata abbastanza lunga, quindi non è un problema).

Questa è, secondo il mio modesto parere, una scelta molto sfortunata su parte di Box.

Quello che devi fare nelle tue applicazioni è, ogni volta che richiedi un nuovo token di accesso, devi anche salvare il nuovo token di aggiornamento che torni, quindi usi il nuovo token di aggiornamento la prossima volta che chiedi un token di accesso. In questo modo, l'unico scenario in cui ti ritroverai con un token di aggiornamento scaduto, è se l'utente non utilizza il proprio login Box per 60 giorni. Finché utilizzano attivamente l'app, riceverai nuovi token di aggiornamento e il ciclo di vita di 60 giorni non è un problema. Fin qui tutto bene, ma non è sempre così che funziona, ora è così?

Il mio problema è che devi salvare il token di aggiornamento su ogni richiesta, ma cosa succede se questo non riesce per qualche motivo: l'interruzione della rete, le flatline della batteria, c'è un'eccezione di scrittura su disco, la tua app viene disattivato dal sistema operativo .... quindi dovrai richiedere l'accesso di nuovo all'utente e l'utente incolperà lo sviluppatore dell'app.

E questo succederà, se hai abbastanza utenti che utilizzano la tua app. Forse solo per il 2-5% nel tempo, ma a mio parere è ancora un problema enorme.

Almeno se il token di aggiornamento era (semi) -permanente, è possibile riprovare il processo di autenticazione fino al completamento. Quindi sapevi di aver salvato il token e di continuare a utilizzarlo, anche per tentativi, quando accadono scenari sopra, ma non così con lo schema di rotazione.

Sto già pensando di creare un'e-mail di supporto standard per i miei utenti che riscontrano questo problema, collegando questa domanda.

+0

Sto già salvando il nuovo token di aggiornamento su ogni richiesta. – MikeLim

+1

Questa è un'app Web ei token sono memorizzati nel nostro server di database, pertanto il rischio di interruzioni è leggermente inferiore. Sono soddisfatto dello schema di rotazione dei token di aggiornamento; è leggermente più sicuro. Tuttavia, preferirei aggiornare token con una durata abbastanza lunga. – MikeLim

+0

Anch'io, ma spero che la mia risposta ti sia ancora utile. Conservo anche il token di richiesta in un database su ogni richiesta, ma su un dispositivo mobile, e nella mia esperienza ci sono molte cose che possono andare storte su di loro, che non posso controllare. – AndersC

2

Grazie per l'input, e Box ha cambiato il modo in cui gestiamo i token di aggiornamento in base a questo feedback, nonché alcune discussioni dettagliate con alcuni dei nostri partner sviluppatori e clienti.

Casella spostata da 14 giorni a 60 giorni. Ciò di per sé dovrebbe ridurre il numero di utenti scaduti al di là di ciò che la maggior parte degli sviluppatori di applicazioni desidera per le proprie applicazioni.

Abbiamo anche, probabilmente ancora più importante, fatto in modo che quando si verifica l'errore di rete, non invalidere il token di aggiornamento non appena emettiamo il nuovo. Se per qualche motivo non si ottiene il nuovo token di aggiornamento, è sufficiente richiamare per ottenerne uno nuovo con il vecchio token di aggiornamento. Puoi farlo tutte le volte che vuoi, finché non ottieni il nuovo token di accesso e il token di aggiornamento.

Dopo aver effettuato una chiamata con il nuovo token di accesso, sappiamo di avere la nuova coppia e invalidiamo il vecchio token di aggiornamento. Ciò aiuta anche gli ambienti multi-server a funzionare meglio, poiché una richiesta simultanea per ottenere la nuova RT funzionerà da più server nel cluster.

Problemi correlati