L'aggiornamento di un token JWT scaduto è una buona strategia?

26

Se comprendo le best practice, JWT di solito ha una data di scadenza di breve durata (~ 15 minuti). Quindi, se non desidero che il mio utente effettui l'accesso ogni 15 minuti, dovrei aggiornare il mio token ogni 15 minuti.

Devo mantenere una sessione valida per 7 giorni (punto di vista UX), quindi ho due soluzioni:

  • usa token web json di lunga durata (1 settimana) - cattiva pratica?
  • ottenere un nuovo token web json dopo che scade quello vecchio (JWT 15min, aggiornamento consentito per 1 settimana)

Sto forzando l'uso di HTTPS.

Lo standard JWT non parla di token di aggiornamento. Sta rinfrescando un token scaduto una buona strategia?

    
posta Guillaume Vincent 03.04.2016 - 13:09
fonte

4 risposte

18

L'aggiornamento di un token viene effettuato per confermare con il servizio di autenticazione che il titolare del token ancora ha i diritti di accesso. Ciò è necessario perché la convalida del token avviene tramite mezzi crittografici, senza la necessità di contattare il servizio di autenticazione. Ciò rende la valutazione dei token più efficiente, ma rende impossibile ritirare i diritti di accesso per la vita di un token.

Senza frequenti aggiornamenti, è molto difficile rimuovere i diritti di accesso una volta che sono stati concessi a un token. Se rendi la vita di un token una settimana, probabilmente dovrai implementare un altro mezzo per gestire, ad esempio, la cancellazione di un account utente, la modifica di una password (o altro evento che richiede il relogin) e una modifica delle autorizzazioni di accesso per l'utente.

Quindi attenersi agli intervalli di aggiornamento frequenti. Una volta ogni 15 minuti non dovrebbe essere sufficiente a compromettere le prestazioni del servizio di autenticazione.

    
risposta data 03.04.2016 - 20:50
fonte
8

Dovresti aggiornare il token ogni 15 minuti, ma non devi consentire all'utente di eseguire nuovamente l'autenticazione per farlo.

  • Dopo l'autenticazione, distribuisci un JWT valido per 15 minuti.
  • Consenti al client di aggiornare il token ogni volta che è scaduto. Se ciò avviene entro sette giorni, è possibile ottenere una nuova JWT senza eseguire nuovamente l'autenticazione.
  • Dopo che una sessione è inattiva per sette giorni, richiede l'autenticazione prima di distribuire un nuovo token JWT.

In questo modo, ad esempio, è possibile richiedere l'autenticazione dopo che un utente ha modificato la propria password.

    
risposta data 12.04.2016 - 11:10
fonte
5

È possibile ottenere il token di accesso configurato per 7 giorni quando l'utente si autentica. Tuttavia non sarà la migliore pratica in termini di sicurezza perché sarebbe più difficile revocare l'accesso se necessario. Ovviamente dipende dalle tue esigenze, ma la best practice è anche ottenere il token di aggiornamento e utilizzarlo per aggiornare il token di accesso in ogni periodo.

    
risposta data 04.04.2016 - 15:49
fonte
2

La mia configurazione è ..

Quando qualcuno accede, genera una JWT con un exp di 5 giorni, con un campo personalizzato, useExp di 10 minuti

Quando qualcuno fa una richiesta autenticata, useExp deve essere in futuro, a meno che non chieda un nuovo token

Quando qualcuno fa una richiesta autenticata per un nuovo token, useExp può essere nel passato, ma l'exp deve essere in futuro. Se valido, genererò un nuovo token come se avessero appena effettuato l'accesso.

Se entrambi i exp sono nel passato, devono fare una richiesta non autenticata per accedere con la loro email e password.

    
risposta data 14.09.2017 - 14:43
fonte

Leggi altre domande sui tag