Da https://stackoverflow.com/a/7209263/1225328:Come mantenere in sicurezza i miei utenti registrati con i token di aggiornamento?
L'idea di aggiornamento gettoni è che se un token di accesso è compromesso, perché è di breve durata, l'attaccante ha una finestra limitata in cui abusarne.
Ho capito, ma se l'utente malintenzionato accede al token di aggiornamento, sarà in grado di ottenere un nuovo token di autenticazione, ho torto? Questo sembra rimandare solo i token di protezione falla longevo ...
Per quanto riguarda questo punto, troverete nella stessa risposta:
gettoni Refresh, se compromessa, sono inutili perché l'attaccante richiede l'id del client e il segreto oltre al token di aggiornamento nell'ordine per ottenere un token di accesso.
Quindi qual è la differenza tra l'utilizzo di un token di aggiornamento e semplicemente la rinuncia? E come memorizzi l'ID e il segreto del cliente se non vuoi che gli utenti debbano rientrare di nuovo in quel momento?
Come @FStephenQ sottolineato, un gettone di aggiornamento può essere utilizzato solo una volta: un attaccante sarà quindi in grado di ottenere un nuovo token di autenticazione, ma solo una volta, e un breve uno. Ma poi, come ottieni un nuovo token di aggiornamento una volta che ne hai già usato uno? Se si ottiene una nuova quando si utilizza uno, un attaccante sarà quindi in grado di aggiornare il loro gettone troppo ...
La domanda reale è: come mantenere i miei utenti connesso? Sulle app che utilizzo, una volta effettuato l'accesso, non devo più accedere nuovamente: come procedono?
Grazie per queste spiegazioni. Ma c'è ancora un problema: dal momento che un token di aggiornamento può essere utilizzato solo una volta, come si ottiene un nuovo token di aggiornamento dopo averne già utilizzato uno? Se ne ottieni uno nuovo quando ne usi uno, un utente malintenzionato potrà quindi aggiornare anche il proprio token ... – sp00m
L'utente malintenzionato dovrà attendere fino alla scadenza del token di accesso, se OAuth viene implementato correttamente. E la ri-autenticazione dell'utente supera sempre i token di aggiornamento; quando un utente si autentica di nuovo, il server (dovrebbe) invalida tutti i token di accesso e i token di aggiornamento precedenti (per il client che effettua la richiesta di autenticazione) e avvia una nuova "catena" di token. Queste due cose combinate significano che un token di aggiornamento rubato sarà molto probabilmente inutile per l'attaccante, e gli attaccanti non possono avere la propria catena di token paralleli (a lungo) senza le credenziali dell'utente. –
Grazie ancora, penso di averlo capito ora. Ma un'altra domanda: se un utente accede con un browser, riceverà un token di accesso e un token di aggiornamento (n. 1).Successivamente, l'utente accede con un altro browser (n. 2, ad esempio al lavoro) e aggiorna il suo token n. 2 (poiché è scaduto ad esempio). Quando tornerà a casa, avrà bisogno di riautenticare, perché ha usato un token di aggiornamento al lavoro, che ha invalidato tutti i token precedenti. Ho capito bene? Come evitare questo comportamento allora? – sp00m