problema di dimensioni token JWT

1

Sto sviluppando un'applicazione a pagina singola che interagisce con un servizio basato su oAuth. Questo servizio concede i token JWT (aggiornamento e accesso) per molte risorse. Potenzialmente il numero di token può essere compreso tra 2 e 100.

La mia domanda è- dove dovrei memorizzare quei token?

  • I cookie hanno un limite di dimensioni di 4KB e ogni token è circa 1 KB, quindi è un no.
  • Lo spazio di archiviazione della sessione risolve il problema ma è esposto a XSS e non persisterà se l'utente apre una nuova scheda della mia app.

C'è una buona pratica qui? C'è un modo per utilizzare lo storage di sessione ma mantenerlo più sicuro in qualche modo?

    
posta Nir Smadar 07.12.2016 - 11:30
fonte

1 risposta

2

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.

    
risposta data 07.12.2016 - 16:44
fonte

Leggi altre domande sui tag