2016-02-19 19 views
10

Ho già fatto una lunga domanda sulla sicurezza dei token JWT, ma desidero concentrarmi specificamente sulla revoca dei token JWT qui. Sto usando JWT come meccanismo di autenticazione principale per l'autenticazione dei client mobili di un'applicazione mobile. La mia domanda è: vale la pena implementare la revoca del token? Attualmente, sto utilizzando una vita breve per i miei token e mi affido a TLS per impedire che i token vengano rubati da utenti non autorizzati. Non ho implementato la revoca del token. Ma fondamentalmente questo significa che se un token viene rubato in qualche modo, non c'è modo di revocarlo. Ciò che mi preoccupa di più è che quando un utente si disconnette dall'applicazione, l'ultimo token che stavano usando funziona ancora se non riesco a revocarlo. Significa anche che non posso porre un limite al numero di token che un utente può richiedere poiché non tengo traccia di alcun token emesso. Ho visto molte applicazioni che memorizzano tutti i token emessi nel database, consentendo loro di revocare e regolare i token. Ma questo sembra solo sconfiggere lo scopo di utilizzare JWT. Vale la pena aggiungere una tale complessità o il mio attuale sistema è sicuro?La revoca del token JWT vale la pena?

Grazie in anticipo. Apprezzo qualsiasi aiuto.

risposta

3

Se valga la pena è difficile per chiunque qui valutare. Dipende da cosa proteggi e dai rischi che stai cercando di mitigare.

È possibile utilizzare reference tokens se si ritiene necessario poter revocare i token. Forza i servizi che consumano questi token per parlare con il server di autorizzazione che riduce la scalabilità e introduce un singolo punto di errore.

Ci sono iniziative in fase di sviluppo per prevenire il furto di token. Dai uno sguardo allo Token Binding Protocol e allo Proof Key for Code Exchange by OAuth Public Clients.

+0

Grazie MvdD. Lo apprezzo. Questo è veramente utile. –

+0

Prego, basta usare i pulsanti upvote se una risposta è utile. E non dimenticare di contrassegnare una risposta come accettata. – MvdD

4

Penso che dovresti considerare la possibilità che qualcuno possa estrarre un token, indipendentemente da come lo hai assicurato. Esiste su un dispositivo su cui non hai controllo.

Piuttosto che passare un token, perché non si negozia una chiave segreta con il client e il server? Possono usare quella chiave per firmare le loro richieste al tuo server e puoi tenere traccia di quei segreti - persino revocarli se qualcuno firma. Questo ti consente di mantenere basse le scadenze delle firme, quindi anche se vengono catturate, sono valide solo per un paio di minuti.

+0

Grazie Travis. Hai ragione. L'account del cliente è completamente compromesso se qualcuno ottiene l'accesso al telefono del cliente. Esaminerò il tuo metodo –

+1

"negoziare una chiave segreta con il client e il tuo server" è un'onda di mano piuttosto grande. In che modo una chiave segreta archiviata centralmente e negoziata è diversa da un JWT negoziato centralmente e negoziato? –