Ho dedicato molto tempo alla creazione di un'API che deve essere accessibile da un'applicazione JavaScript a pagina singola e su come renderla il più sicura possibile.
Molto di quello che sto leggendo su standard come OAuth suggeriscono che non vuoi mai che il token di accesso che hai emesso sia reso disponibile direttamente al client, ed è per questo che cose come la Sovvenzione implicita sono spesso criticate.
Recentemente ho letto questo articolo: link
... che offriva un interessante suggerimento di inoltrare richieste all'API attraverso un componente lato server sottile, in modo che l'app a pagina singola potesse autenticarsi con il proxy, ottenere un cookie di sessione crittografato e quindi effettuare richieste al proxy server che collega il token di accesso dell'utente alle richieste prima di inoltrarle all'API effettiva.
Quello che mi chiedo è come questo sia più sicuro di un semplice token di accesso al client? Se l'utente malintenzionato sarebbe stato in grado di ottenere il token di accesso, sicuramente potrebbe ottenere il cookie che memorizza le informazioni sulla sessione che è buono quanto il token di accesso per effettuare richieste all'API?
Perché consideriamo sicuri i cookie crittografati con i dettagli della sessione, ma la fiducia nel client con il token di accesso effettivo è considerata non sicura?
La vera differenza è che un'API senza accesso diretto al client è considerata un'API privata e sicura e qualsiasi API che deve essere accessibile dal lato client in qualsiasi modo (anche attraverso un proxy) deve essere trattata come un'API pubblica o aperta, e devi solo accettare il trade dal rischio che qualcuno sia potenzialmente in grado di falsificare le richieste se sono in grado di mettere le mani sul cookie di sessione o sul token di accesso?
Qual è in realtà il modo più sicuro per un'applicazione a singola pagina per dimostrare la sua identità a un'API?