MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Devo archiviare i token JWT in redis?

TLDR:se vuoi che la capacità di revocare il token a un certo punto, sì, salvalo in qualcosa di veloce come Redis.

Uno degli svantaggi ben documentati dell'utilizzo di JWT è che non esiste un modo semplice per revocare un token se, ad esempio, un utente deve essere disconnesso o il token è stato compromesso. Revocare un token significherebbe cercarlo in qualche spazio di archiviazione e quindi decidere cosa fare dopo. Poiché uno dei punti di JWT è evitare i round trip al db, un buon compromesso sarebbe conservarlo in qualcosa di meno faticoso di un rdbms. È un lavoro perfetto per Redis.

Come suggerito nei commenti, un buon approccio è rendere la lista una blacklist (cioè una lista di token invalidati). Ad ogni richiesta si cerca l'elenco per assicurarsi che il token non sia presente in esso. È possibile migliorare ulteriormente lo spazio di memoria e le prestazioni durante la fase di ricerca utilizzando un algoritmo probabilistico per archiviare il token. Un approccio semplice consiste nell'avere ricerche a più livelli. Ad esempio, potresti avere un piccolo negozio in-app che tiene traccia solo dei primi (ad esempio da 1 a 4) byte dei tuoi token nella lista nera. Quindi la cache redis traccerebbe una versione leggermente più completa degli stessi token (ad esempio i primi 2-8 byte). È quindi possibile archiviare una versione completa dei token nella lista nera utilizzando una soluzione più persistente (filesystem, rdbms, ecc.). Questa è una strategia di ricerca ottimistica che confermerà rapidamente che un token è assente dalla lista nera (che sarebbe il caso più comune). Se un token cercato corrisponde a un elemento nella lista nera in-app (perché i suoi primi byte corrispondono), passa a una ricerca aggiuntiva nell'archivio Redis, quindi nell'archivio persistente, se necessario. Alcuni (o tutti) i negozi possono essere implementati come try o hash table. Un'altra struttura di dati efficiente e relativamente semplice da implementare da considerare è quella chiamata filtro Bloom.

Ovviamente, dovresti adattare l'approccio di cui sopra se inserisci regolarmente nella blacklist milioni di token di lunga durata (il che potrebbe anche indicare che hai un problema diverso).