Devo progettare un "widget", uno script che i partner inseriranno nei loro siti Web per visualizzare alcune UI ed effettuare chiamate alla nostra API.
Fondamentalmente mostrerà i nostri dati su questi siti in base ad alcuni ID che forniscono nelle nostre chiamate API. Quello che vorremmo evitare è qualcuno che abusa dell'API e lo utilizza per raschiare l'intero catalogo.
A ciascun partner che incorpora il nostro script verrà fornita una chiave pubblica che deve essere fornita quando si chiama l'API. Un'idea sarebbe quella di chiedere loro di aggiungere questa chiave durante il caricamento dello script, ad esempio:
<script src="//initrode.com/widget/loader.js?key=xxxx"></script>
In questo modo la richiesta per lo script può essere utilizzata per registrare la coppia IP chiave / sorgente e rispondere alle successive chiamate API solo se la coppia chiave / IP corrisponde a una registrata (con una durata limitata e un limite di richieste al giorno).
Non sono sicuro che sia una buona idea poiché è ovviamente sicurezza attraverso l'offuscamento (qualcuno che ricarica la sceneggiatura la ignorerà completamente); ma non vedo nessun altro modo per limitare l'accesso. Non posso fornire una chiave univoca per ogni utente, solo per i partner. Non riesco a usare un sistema a chiave privata poiché tutto il codice sarà disponibile per chiunque. Fondamentalmente sta limitando l'accesso a un'API pubblica, cioè contraddittoria nella sua definizione.
Cosa ne pensi di questa soluzione e cosa faresti con questi vincoli?