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.