JWT: una soluzione per far scadere il token dopo un certo periodo di inattività?

2

Ho una webapp senza stato che usa un token JWT. Alla fine scadrà, il che è OK, ma non voglio che scada mentre l'utente sta lavorando . Invece, vorrei che il token scada dopo un certo periodo di inattività.

Diciamo che il mio token è valido 60 minuti, è giusto inviare un nuovo JWT su ogni richiesta? In questo modo, finché l'utente sta lavorando, il suo token sarà rinnovato (per quanto tempo mentre effettua una richiesta all'ora), ma dopo più di un'ora di inattività, il token scadrà.

Non voglio usare i token di aggiornamento stateful. Un timer sul lato del cliente eliminerebbe il token non appena scade.

Mi manca un grosso difetto con questo approccio? (tranne impatti evidenti sulle prestazioni a causa di accessi DB più frequenti)

    
posta Tim 03.08.2017 - 16:57
fonte

1 risposta

2

Le JWT sono token controllati dall'integrità auto-descrittiva. Non sono progettati per il caso d'uso che hai descritto. Le JWT non possono essere scadute su richiesta, né la loro validità può essere estesa.

Quello che puoi fare con questi token è emettere nuovi token, proprio come hai descritto tu. Questo non invaliderà i vecchi. Finirai per generare un sacco di token che scadranno da soli.

Am I missing a major flaw with this approach?

Le JWT non sono progettate per una gestione della sessione completa. Vengono con vari compromessi. Uno di questi è l'impossibilità di aggiornarli o espirarli su richiesta. La soluzione che hai descritto funziona perfettamente. Ho scritto un breve post su gestione delle sessioni , che dovrebbe aiutarti a decidere se effettuare i compromessi.

A mio parere, dovresti probabilmente passare al modello di gestione delle sessioni "classico". Supporta i timeout inattivi e non si finirà anche con un sacco di "sessioni" (token).

    
risposta data 03.08.2017 - 17:35
fonte

Leggi altre domande sui tag