Sto lavorando a una pagina Web che utilizza molto AJAX per comunicare con il server. Il server, a sua volta, ha una vasta API REST/JSON che espone le diverse operazioni chiamate dal client web.Protezione API Web da applicazioni non autorizzate
Questo sito Web viene utilizzato da utenti sia anonimi che autenticati. Come ci si potrebbe aspettare, le chiamate al servizio Web emesse da utenti autenticati richiedono l'autenticazione e sono quindi protette da utenti o applicazioni non autorizzati.
Tuttavia, il sito Web presenta molte funzionalità che non richiedono autenticazione e alcune di queste utilizzano servizi Web anonimi. L'unico modo che sto usando per impedire agli estranei di chiamare questo servizio web è usando uno CSRF token. Lo so, il token CSRF non è molto utile in questo senso ... con un po 'di tempo in mano, puoi capire come consumare i servizi web anche se usano un token CSRF.
Ovviamente, è possibile utilizzare un CAPTCHA per impedire l'utilizzo autonomo del servizio Web da parte di applicazioni o bot. Tuttavia, qualsiasi essere umano sarà in grado di usarlo.
La condivisione di una chiave segreta tra client e server, dall'altra parte, sarebbe inutile. Questo, a causa della capacità di qualsiasi estraneo di leggerlo dal codice sorgente della pagina web.
Mi piacerebbe rendere questi servizi Web difficili da invocare come possibile per qualsiasi applicazione di terze parti. Cosa faresti oltre all'utilizzo del token CSRF? Sembra un po 'stupido, ma hey, forse è stupido e sto solo perdendo tempo.
Nota: data questa applicazione utilizza un browser e non un "eseguibile" come client, this question è irrilevante per la discussione. Non posso usare un segreto tra server e client (non che io sappia, almeno)
Quindi quello che stai dicendo è che non vuoi che gli umani oi computer siano in grado di usare la tua API? –