Panoramica:
La mia azienda ha sviluppato un'API a tariffa limitata. Il nostro obiettivo è duplice:
- R: Crea un solido ecosistema di sviluppatori attorno al nostro prodotto.
- B: Dimostrare la potenza della nostra API utilizzandola per guidare la nostra applicazione.
Chiarimento: perché il limite di velocità?
Valutiamo limite la nostra API, perché la vendiamo come aggiunta al nostro prodotto. L'accesso anonimo alla nostra API ha una soglia molto bassa per le chiamate API all'ora, mentre ai nostri clienti a pagamento sono consentite fino a 1000 chiamate all'ora o più.
Il problema:
La nostra API a tariffa limitata è ottima per l'ecosistema degli sviluppatori, ma per consentirci di sperimentarla non possiamo consentire che sia limitata allo stesso limite di velocità. Il front-end della nostra API è tutto JavaScript, che effettua chiamate Ajax dirette all'API.
Quindi la domanda è:
Come si protegge un'API in modo che la limitazione della velocità possa essere rimossa dove nel processo di rimozione tale limitazione della velocità non può essere facilmente falsificata?
Soluzioni esplorate (e perché non hanno funzionato)
Verifica il referrer rispetto all'intestazione host. - Difettoso perché il referrer è facilmente contraffatto.
Utilizzare un HMAC per creare una firma basata sulla richiesta e un segreto condiviso, quindi verificare la richiesta sul server. - Difettoso perché il segreto e l'algoritmo sarebbero facilmente determinabili esaminando il JavaScript front-end.
Proxy la richiesta e firma la richiesta nel proxy - Ancora difettoso, poiché il proxy stesso espone l'API.
La domanda:
Sto cercando le menti brillanti di Stack Overflow per presentare soluzioni alternative. Come risolveresti questo problema?