Ho un'applicazione per pagina singola che è completamente HTML + JS + CSS (utilizzando framework come jQuery e AngularJS) e un'API lato server che utilizza ASP.NET WebApi.
La SPA viene servita in un server simile a un CDN e anche confezionata con Cordova per l'utilizzo negli smartphone.
L'API lato server ha molti metodi che richiedono autorizzazione e autenticazione, quindi devo accedere e passare un identificativo dal lato client in modo che il server possa sapere chi sono.
I problemi che sto affrontando:
-
Una volta autenticato, dove dovrei memorizzare il token di accesso \ ID di sessione?
al momento ho creato il mio metodo di autenticazione (non OAuth) che restituisce un ID di sessione, che il client inserisce in ogni successiva chiamata HTTP nell'intestazione Autorizzazione. Tuttavia, quando un utente decide di aggiornare la pagina, l'intestazione non è più disponibile. Le soluzioni devono salvare l'ID di sessione in un sessionStorage che potrebbe essere non sicuro (OWASP non lo consiglia, ma forse X-Frame-Options = SAMEORIGIN sarebbe sufficiente?) O usare un cookie HttpOnly per la gestione delle sessioni, che mi porta al prossimo punto:
-
Se utilizzo i cookie, è necessario verificare la presenza di CSRF, ma se non lo sono? c'è qualche ragione per aggiungere un CSRF? è nello stesso ambito per l'ID di sessione.
-
Ho il mio sistema utente e la gestione del gruppo che dispone di solidi controlli di accesso. C'è qualche vantaggio per me di usare OAuth e OpenID se ho già un filtro di autorizzazione funzionante che controlla ciò di cui ho bisogno, e non è basato su ruoli-stringa? (vale a dire ruoli="amministratori" ecc., ma completamente CanChangeResource (x))
Non sono riuscito a trovare domande simili che potrebbero rispondere ai miei problemi e apprezzerebbero una risposta informativa.