Come implementare la revoca automatica JWT?

0

Sto lavorando su un'API usando Node ed Express, con un database Mongo. I miei utenti possono autenticarsi utilizzando un percorso e ricevono in cambio un JWT.

Voglio implementare un meccanismo di sicurezza per proteggere detti token. Vale a dire, voglio che i token si auto-revocano quando un utente cambia la sua password e fornisce un pulsante "Revoca tutte le app", che invalida i token creati da tutti .

Per fare ciò, ho aggiunto un nonce nel corpo del JWT, che è un UUID v4 casuale. Quando l'utente cambia la sua password o fa clic sul pulsante, viene generato un nuovo UUID, che causa una revoca di fatto di tutti i token, poiché il corpo del JWT non corrisponde a ciò che proviene dal database.

È un buon approccio? Non riesco a pensare a un modo in cui questo sarebbe rotto, c'è qualcosa che ho trascurato?

    
posta Rogue 02.03.2017 - 13:15
fonte

2 risposte

2

Il tuo approccio è valido quando si tratta di sicurezza, purché tu (1) usi un PRNG crittograficamente sicuro e (2) non perda in qualche modo l'UUID. Tuttavia, vuol dire che devi colpire il database per controllare l'UUID ad ogni richiesta . Ciò annulla l'aumento di prestazioni ottenuto dall'utilizzo di una JWT anziché di un ID di sessione tradizionale.

Un piccolo miglioramento delle prestazioni che puoi fare è di aggiungere invece token revocati a un elenco di revoche che viene automaticamente eliminato per rimuovere i token scaduti. Ad ogni richiesta, controlli se il token è in quella lista. Poiché è probabile che un elenco di tutti i token revocati sia più breve di un elenco di tutti i tuoi utenti, la ricerca sarebbe un po 'più veloce.

E come sempre il diavolo è nei dettagli. Sono sicuro che ci sono molti errori che si potrebbero fare mentre si implementa uno di questi schemi nel codice, ma quel livello di dettaglio va oltre lo scopo della domanda.

    
risposta data 02.03.2017 - 13:47
fonte
-1

Come ha detto Anders, dovrai colpire il database ad ogni richiesta. Oltre all'ottimizzazione che propone con un elenco senza token scaduti, è possibile implementare tale elenco come filtro di fioritura in memoria. In questo modo dovrai colpire il database solo in caso di risposta "Forse" e le prestazioni sarebbero molto maggiori.

    
risposta data 02.03.2017 - 14:48
fonte

Leggi altre domande sui tag