Si tratta di un'implementazione sicura dei token di aggiornamento JWT?

1

Sto implementando un token di aggiornamento JWT e ho sviluppato il seguente modo di token di aggiornamento. Quello che segue è il flusso del programma:

  • Quando il server recupera le informazioni di accesso, verifica la password database e crea token JWT con un token di aggiornamento come uno dei suoi crediti nel carico utile. (personaggi casuali). Memorizzerà l'aggiornamento token in un database.
  • Al momento dell'accesso, il server ha restituito l'accesso: true e il token di accesso JWT
  • Poiché il token di aggiornamento si trova all'interno della JWT, non è necessario che due token essere inviato
  • Se il client invia un token di accesso scaduto, lo farà il server controlla il token di aggiornamento nelle attestazioni e verifica se si trova all'interno del db. Se lo è, genererà un nuovo token con un nuovo token di aggiornamento e sostituisci il vecchio token di aggiornamento nel db con quello nuovo.
  • Se il cliente vuole disconnettersi da tutti i dispositivi, può semplicemente revocare tutto dei loro token di aggiornamento e verranno disconnessi quando tutti loro Scadenza dei token (token JWT di 15 minuti).

I vantaggi che vedo in questa implementazione sono:

  • Non è necessario inviare due token. L'aggiornamento è incorporato all'interno del JWT e non può essere modificato perché ciò invaliderebbe la firma.
  • Non è necessario crittografare il token di aggiornamento nel database perché se un l'attaccante ha afferrato il token di aggiornamento, non possono fare nulla con esso perché è all'interno del JWT e non può essere modificato. (Nel altre implementazioni con token separati dovremmo assumere un l'attaccante prende comunque entrambe le cose)

I problemi che vedo con questo sono:

  • Le JWT contengono sempre il token di aggiornamento, quindi l'autore dell'attacco sarà SEMPRE in grado di eseguire un aggiornamento e utilizzare il token di aggiornamento fino alla sua scadenza, a meno che il client non lo revochi effettuando la disconnessione (di tutti i dispositivi).
  • Il client può eseguire la chiamata di accesso in un ciclo e riempire il database perché ogni volta che si accede, viene creato un nuovo token di accesso e a il nuovo token di aggiornamento è archiviato nel database.

Questo metodo è sicuro? Se è così, sono principalmente interessato a qualcuno che riempie il database con nuovi token di aggiornamento e riempiendo il disco. Come evito che ciò accada?

    
posta user4757174 22.09.2018 - 05:57
fonte

0 risposte

Leggi altre domande sui tag