Cosa voglio:
- Archivia una JWT in localStorage. Il JWT contiene indicazioni sull'autorizzazione.
- Impedisci che il JWT venga rubato e utilizzato da un utente malintenzionato (utilizzando XSS)
- Evita CSRF
L'archiviazione del JWT in localStorage non è buona, in quanto lo sfruttamento di XSS comporterebbe un JWT rubato, che un utente malintenzionato potrebbe utilizzare per l'autorizzazione.
L'archiviazione di JWT nel cookie http non è valida poiché non ha spazio sufficiente per le attestazioni.
Una possibile soluzione è:
- Crea un cookie solo http con un ID di sessione
- Archivia JWT in localStorage con la stessa sessioneId crittografato all'interno
- Sul server, verifica che l'ID di sessione nel JWT e il cookie corrispondano prima di utilizzare le attestazioni.
In questo modo il JWT può essere rubato, ma non può essere usato a meno che l'attacker non abbia anche il sessionId dal cookie. Inoltre, CSRF non è possibile poiché un cookie non è sufficiente per l'autorizzazione.
Ci sono dei difetti con il mio ragionamento? Esistono modi più semplici per realizzare la stessa cosa?