Come consentire agli utenti di connettersi da più dispositivi con token di aggiornamento?

6

Questa domanda segue la mia precedente: Come mantenere in sicurezza i miei utenti registrati con i token di aggiornamento?

Quello che ho ottenuto da questa domanda precedente è che abbiamo bisogno di:

  • token di accesso di breve durata
  • long to lived one-time token di aggiornamento

I token di aggiornamento vengono mantenuti nel DB accanto agli utenti in una relazione 1-1 (1 utente = 1 token di aggiornamento). Ogni volta che un token di aggiornamento viene creato per un utente, sostituisce quello persistente dell'utente precedente (se presente). Ciò consente ai possibili hacker di avere solo una finestra limitata per fare le loro cose:

  • l'utente accede e riceve il token di accesso A1 e aggiorna il token R1
  • l'hacker riesce a ottenere quei token in qualche modo
  • accedi al token A1 raggiunge la scadenza, quindi l'hacker ottiene nuovi token di accesso / aggiornamento A2 / R2 grazie al token di aggiornamento rubato R1 : token di aggiornamento appena creato R2 (che solo l'hacker ha ) sostituisce il precedente R1 in DB (quello che l'utente ha)
  • l'utente non riesce a ottenere un nuovo token di accesso perché il suo token di aggiornamento R1 non esiste più, quindi accedi nuovamente e ottieni nuovi token di accesso / aggiornamento A3 / R3 : token di aggiornamento appena creato R3 (che solo l'utente ha) sostituisce il precedente R2 in DB (quello che ha l'hacker)
  • il token di accesso dell'hacker A2 scade, ma non può ottenerne uno nuovo perché il token di aggiornamento R2 non esiste più: deve rubare nuovamente i token (si suppone che sia difficile da fare ovviamente)

Quello che mi sto chiedendo qui è come consentire a un utente di connettersi da più dispositivi con questo meccanismo? Ad esempio, se un utente accede con due laptop diversi, i token di aggiornamento si cancelleranno sempre a vicenda ... Qualsiasi indizio?

    
posta sp00m 09.08.2017 - 17:47
fonte

1 risposta

3

A mio parere, la domanda che stai ponendo ora non riguarda più la sicurezza, ma è più focalizzata sull'implementazione di un concetto. Hai già stabilito che i token di aggiornamento rendono più difficile per gli aggressori e sembra che tu abbia un'implementazione funzionante. Da ciò che stai descrivendo, stai facendo uso di una soluzione personalizzata e non qualcosa come un'implementazione della libreria OAuth2 che ti fornirà questa funzionalità.

Ora è necessario decidere se si desidera l'autenticazione di più dispositivi dallo stesso account utente. Se non vuoi che gli utenti effettuino l'accesso da più dispositivi su un unico account, congratulazioni, la tua soluzione sta già funzionando. Saranno presto disconnessi dal vecchio dispositivo poiché non conterrà il token di aggiornamento corretto dopo un timeout.

Se si desidera fornire agli utenti la possibilità di accedere da più di un dispositivo sullo stesso account, sono purtroppo necessarie alcune modifiche. Una possibile soluzione consiste nell'aggiungere un campo di identificazione del dispositivo nel database e rilasciare un token di aggiornamento per dispositivo.

    
risposta data 18.08.2017 - 05:21
fonte

Leggi altre domande sui tag