2015-10-02 14 views
6

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?

risposta

4

Un token di aggiornamento può essere utilizzato solo per aggiornare una volta e viene inviato al server di autenticazione solo quando il token di accesso del client è scaduto. Quando viene utilizzato un token di aggiornamento, il server di autenticazione restituisce un nuovo token di autenticazione e facoltativamente un nuovo token di aggiornamento. L'idea è di consentire l'utilizzo di token di accesso di breve durata, consentendo al contempo un client valido di eseguire nuovamente l'autenticazione senza costringere l'utente a effettuare nuovamente il login.

Se un token di aggiornamento viene rubato, può essere utilizzato una volta per ottenere un token di accesso valido da parte dell'utente malintenzionato. Quando il client tenta di aggiornare il proprio token, il loro token di aggiornamento sarà obsoleto e pertanto verrà rifiutato. Chiederanno quindi all'utente di effettuare nuovamente il login e il server di autenticazione darà loro un nuovo token di accesso e un token di aggiornamento, e il token rubato verrà invalidato.

+1

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

+1

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. –

+1

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

Problemi correlati