Svantaggi di memorizzare un token di autenticazione sul lato client?

9

Sto lavorando su un'applicazione web ASP.NET MVC, che recupera i dati da un'API sul retro. L'autenticazione viene attualmente eseguita tramite autenticazione moduli ASP.NET, il che significa che il client invia e-mail e password al sito Web, il sito Web trasferisce tali dati all'API che restituisce un token di autenticazione, che viene archiviato all'interno di una sessione ASP.NET. Dopodiché il cookie auth è impostato sul client.

Va bene e sicuro (dalle mie attuali conoscenze), nessuna credenziale o il token è memorizzato sul lato client.

Come svantaggio, ogni richiesta AJAX deve essere instradata attraverso il sito web. Di conseguenza, ho un numero elevato di azioni ASP.NET MVC, che non eseguono nulla se non inoltrano la richiesta all'API e restituiscono il risultato di ritorno da lì.

Potrebbe trattarsi di un collo di bottiglia in futuro, perché l'infrastruttura del sito web deve essere ridimensionata nello stesso modo in cui deve essere l'infrastruttura api. Ora sto cercando una soluzione per rimuovere queste chiamate ridondanti tramite il sito web e andare direttamente all'API dal client (tramite AJAX).

Richiede l'autenticazione API dal client. Questo non sarebbe un problema, tecnicamente, se immagazzino il token di autenticazione in LocalStorage (i vecchi browser non sono supportati).

Ma quanto è sicuro questo approccio? Quali opzioni esistono per rubare il token, accanto a JSONP (che può essere impedito non includendo gli script esterni, giusto?)?

    
posta asp_net 04.04.2013 - 11:28
fonte

1 risposta

5

Dato che farai chiamate al server API tramite Ajax (il che significa che la stessa pagina e lo stesso contesto JavaScript saranno costanti) ti suggerirei di creare un token di breve durata nel server principale, con la richiesta del browser una volta, quindi utilizzandolo per l'autenticazione con il server API fino a quando la pagina non viene chiusa (o il token scade, a seconda di quale evento si verifichi prima). La prossima volta che l'utente visita la pagina, genera un nuovo token.

In questo modo le chiamate al server principale saranno rare (e non è possibile evitarle comunque, poiché ogni volta che l'utente si disconnette o cancella i cookie dovrà autenticarsi nuovamente con il sito principale), e tu evitare il fastidio di dover proteggere ancora un altro pezzo di dati.

Come per i vettori di attacco Local Storage, credo che in teoria siano approssimativamente uguali a quelli relativi ai cookie: XSS, accesso fisico alla macchina, ecc. poiché è soggetto allo stesso Politica di origine (almeno quelli creati da una pagina protetta da SSL), ma contrariamente ai cookie, non supporta una visibilità limitata per percorso (cioè tutte le pagine del dominio possono accedere ai dati da qualsiasi altra pagina) . In pratica, tuttavia, potrebbero esserci incongruenze nel modo in cui è implementato, così come altri problemi di sicurezza, quindi non mi fiderei di esso a meno che non fossi molto sicuro che sia sicuro (qualcosa che non posso affermare con le mie attuali conoscenze). Secondo questa guida OWASP che memorizza i dati sensibili in Archiviazione locale è scoraggiata. SessionStorage è non a prova di proiettile .

    
risposta data 04.04.2013 - 12:38
fonte

Leggi altre domande sui tag