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.
Sto già salvando il nuovo token di aggiornamento su ogni richiesta. – MikeLim
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
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