Sto lavorando all'applicazione React-Django che utilizza JWT per l'autenticazione. L'utente accede con nome utente e password, il server convalida e risponde con JWT e nome utente e (attualmente) sto memorizzando solo il JWT in sessionStorage
.
Il JWT viene quindi verificato come valido e aggiornato ogni volta che l'utente naviga tra le rotte protette. Se è ancora buono, viene aggiornato. cioè è inviato da sessionStorage.getItem('token')
al server, ne viene inviato uno nuovo se quello inviato è ancora valido e sostituisce quello esistente in sessionStorage
. Cool.
Il problema che ho riscontrato è mentre ho identificato che l'utente è autorizzato ad accedere e continuare ad accedere a questi percorsi protetti, non so davvero chi sono e quindi non sono in grado di estrarre i dati specifici per loro. (Non ho avuto fortuna nell'usare cose come user = request.user.username
per raccogliere chi è l'utente corrente e il JWT dopo che il problema iniziale del JWT non ha nome utente insieme ... da quello che posso dire.)
Quindi vedo due opzioni per risolvere questo:
1) Memorizza il JWT nel DB con relazione all'utente e in sessionStorage
in modo che possa essere chiamato da sessionStorage
, confrontato con il DB, e quindi identificare l'utente da quello.
Sembra che questa potrebbe essere l'opzione "più sicura" da percorrere.
2) Poiché il server sta già rinviando username
insieme al JWT quando l'utente esegue l'accesso, posso semplicemente iniziare a memorizzare entrambi in sessionStorage
. In questo modo, posso sessionStorage.getItem('username')
e richieste al server per recuperare informazioni specifiche dell'utente. Tuttavia, qualcuno potrebbe sessionStorage
e ottenere il loro nome utente. (I JWT sono validi solo per 15 minuti e se soddisfa il limite di tempo, l'utente è disconnesso e sessionStorage.clear()
è terminato.)
Il secondo, è quello che mi preoccupa della sicurezza. Sono ben lungi dall'essere un esperto di sicurezza, quindi solo curioso di sapere quali sono le ramificazioni della memorizzazione di username
in sessionStorage
e quale di questi sarebbe "migliore".
EDIT: Mentre continuo a leggere sull'argomento, sto trovando numerose guide e libri che utilizzano esempi in cui username
è memorizzato in sessionStorage
. Questo però non lo rende giusto. Ad esempio, questo bellissimo esempio memorizza il nome utente e la password in localStorage
(potrei uscire su un ramo qui, ma questa è una pessima idea):