Il primo pensiero è che sembra essere un bel po 'di token e fa sorgere la domanda se sia davvero un requisito per il server di autorizzazione emettere così tanti token specifici o se meno token con applicabilità più ampia potrebbero sufficiente.
Tuttavia, concentrandosi sulla tua domanda ...
Oltre al sessionStorage
c'è anche localStorage
che risolverebbe il problema della condivisione tra più schede.
Come hai giustamente sottolineato, l'archiviazione tra i cookie e lo spazio di archiviazione web presenta diversi problemi di sicurezza, uno dei quali è che lo storage web è vulnerabile a XSS mentre un cookie solo HTTP non lo è. Tuttavia, un cookie solo HTTP utilizzato per l'autenticazione è vulnerabile a CSRF perché è incluso automaticamente dal browser, mentre un token memorizzato nella memoria Web non lo è.
Alla fine dei giorni, scegliere il giusto spazio di archiviazione è scegliere i pro e i contro che si adattano meglio al tuo scenario specifico. Per una migliore idea dell'impatto delle tue scelte controlla questa risposta su StackOverflow . Copre i pro e i contro delle seguenti opzioni:
- Opzione 1 - Archiviazione Web (localStorage o sessionStorage)
- Opzione 2 - cookie solo HTTP
- Opzione 3: cookie accessibile Javascript ignorato dal lato server
Per quelli che non seguono i link, includo la parte delle conclusioni inline:
My recommendation for most common scenarios would be to go with Option 1, mostly because:
- If you create a Web application you need to deal with XSS; always, independently of where you store your tokens
- If you don't use cookie-based authentication CSRF should not even pop up on your radar so it's one less thing to worry about
Also note that the cookie based options are also quite different, for Option 3 cookies are used purely as a storage mechanism so it's almost as if it was an implementation detail of the client-side. However, Option 2 means a more traditional way of dealing with authentication; for a further read on this cookies vs token thing you may find this article interesting: Cookies vs Tokens: The Definitive Guide.
Finally, none of the options mention it, but use of HTTPS is mandatory of course, which would mean cookies should be created appropriately to take that in consideration.