Il flusso di aggiornamento JWT è generalmente sicuro?

1

Utilizzerò JWT per l'autenticazione per la mia API REST. Utilizzo servizi cloud di terze parti e la scrittura di database è molto costosa, quindi cerco di evitare di scrivere nel database il più possibile. A causa di ciò, voglio evitare di utilizzare un token di aggiornamento perché in questo modo dovrei aggiornare frequentemente il database (la scrittura è quasi 10 volte più costosa della lettura). Il mio piano generale per il flusso di autenticazione è il seguente:

1) Registri utente (supponendo che l'autenticazione e-mail sia completa e completa) e la seguente tabella di database viene compilata come tale:

| Username | HashedPassword | TokenIncrement | AccountStatus
------------------------------------------------------------
   Bob     |   someGiberish |       1        |    Valid

2) Il server genera un token che è valido per 15 minuti. Ha un campo TokenIncrement etichettato come 1

3) L'utente interagisce con la mia applicazione usando il token

4) Il token è scaduto

5) L'utente tenta di utilizzare il token scaduto

6) Il server rileva che è scaduto (tutto ciò che come emittente, soggetto, ecc sono altrimenti validi).

7) Il server non aggiornerà questo token.

8) Il server legge il database per questo utente. Vede che l'account è valido e che l'incremento del token è uguale a 1. Questa è la stessa informazione che è memorizzata sul token in modo che il server crei un nuovo token per l'utente.

9) Lungo il percorso il token viene rubato (o l'utente pensa che sia), quindi segnalano che il loro account è stato violato. 10) Questo token rubato può essere utilizzato per continuare a svolgere attività dannose e può essere costantemente aggiornato fino a quando l'account non viene ritenuto svolgere attività sospette. 10) Il mio server quindi incrementerebbe il campo della tabella del database TokenIncrement a 2.

11) Ora tutti i vecchi token non sarebbero in grado di essere aggiornati perché avrebbero un TokenIncrement di 1. Ciò significa che quando veniva verificato il token avrebbe detto 1, ma il database mostrerebbe 2, non lo avrebbero partita.

12) L'utente valido eseguirà di nuovo l'accesso e otterrà il token corretto con l'incremento che mostra 2 e sarà in grado di fare tutto ciò che è necessario fare.

Con questo metodo l'unica volta che mi serve una scrittura di database è quando un account viene violato, contrario all'aggiornamento del database ogni volta che il token di aggiornamento scade.

Oltre alle perdite di sicurezza ereditate di JWT, ci sono evidenti buchi in questa strategia (ho capito che nulla è mai veramente sicuro)?

Cheer

    
posta user2924127 16.03.2017 - 01:51
fonte

0 risposte

Leggi altre domande sui tag