Perché dovrei voler revocare i token JWT?

1

Dopo aver studiato le differenze tra OAuth e JWT, ho deciso di utilizzare JWT sul mio prossimo progetto per motivi di semplicità e prestazioni.

Da quanto ho appreso fino ad ora, e, per favore, correggimi se sbaglio, JWT è un dato autonomo, hash con una chiave pubblica sul client. Posso quindi controllarlo con una chiave segreta e verificarne la validità sul mio back-end. Ok ..

Ma c'è una cosa che ancora non riesco a capire: token JWT che revoca . Ho visto molti post e argomenti su "Come revocare JWT" o se è "Possibile o no revocare JWT", "JWT Blacklisting", e anche alcuni post che dicono che non ha senso in nessuno di questi.

Voglio capire: perché dovrei voler revocare il JWT? La revoca non sarebbe un difetto di sicurezza? Come?

    
posta raphadko 21.07.2017 - 07:35
fonte

2 risposte

5

L'implementazione predefinita di una JWT è senza stato. Ciò significa che non si posseggono informazioni relative al singolo token in alcuna forma di archiviazione (file, database, memoria, ecc.). Stai facendo affidamento sulla firma del JWT per convalidare di aver emesso questo token.

Questo non è più o meno sicuro di un token stateful di per sé per quanto riguarda la protezione del token. Tuttavia ha implicazioni sulla sicurezza per un token compromesso.

Poiché non hai modo di sapere quale token individuale è dovuto al fatto di non memorizzare alcuna informazione su di loro, non puoi rifiutare i token che superano la convalida della firma di base. Ciò significa che se in qualche modo riuscirò ad acquisire il tuo token, potrò metterti in posa fino alla scadenza del token.

È possibile creare una JWT stateful. Basta memorizzare alcuni dati su di esso il token e in un database. Dì un ID univoco insieme a chi è stato rilasciato. Ho fatto alcune cose diverse nel tempo con le JWT per mantenerle in buona forma:

  • Memorizza la versione dell'API che l'ha pubblicata
  • Memorizza una versione di password dell'utente al suo interno (ovvero un aggiornamento della password revoca i token precedenti)
  • Archivia un ID univoco per identificare i token individuali

Per la cronaca, revocare un token significa in genere rimuovere a titolo definitivo le informazioni token dalla memoria o contrassegnarle come cancellate; in quanto tale viene rifiutato quando viene tentata l'autorizzazione.

Per la cronaca non sto dicendo che è necessario aggiungere lo stato al token fintanto che si è consapevoli delle implicazioni. Personalmente aggiungerei uno stato, non per me ma per gli utenti. I problemi di sicurezza sono in genere nella parte inferiore della loro lista fino a quando accade qualcosa di tragico.

    
risposta data 21.07.2017 - 08:31
fonte
4

Ecco alcuni motivi per cui vorresti revocare JWT:

  • L'utente vuole "disconnettersi". Dovrebbe cancellare tutte le sessioni e revocare il JWT
  • Si nota un'attività insolita / dannosa proveniente da un JWT di un certo utente

La revoca è importante perché devi essere in grado di annullare l'accesso ai tuoi sistemi. Se una persona malintenzionata ha accesso a una delle JWT dell'utente legittimo e senza la possibilità di revocare JWT, è necessario disabilitare l'accesso dell'utente tramite il controllo di accesso che potrebbe influire sull'utente legittimo.

    
risposta data 21.07.2017 - 08:06
fonte

Leggi altre domande sui tag