Tengo que diseñar un "widget", un script que los socios incorporarán en sus sitios web para mostrar una interfaz de usuario y realizar llamadas a nuestra API.
Básicamente, mostrará nuestros datos en estos sitios en función de algunos ID que proporcionan en nuestras llamadas a la API. Lo que nos gustaría evitar es que alguien esté abusando de la API y usándola para raspar la totalidad de nuestro catálogo.
Cada socio que incorpore nuestro script recibirá una clave pública que debe proporcionarse al llamar a la API. Una idea sería pedirles que agreguen esta clave al cargar el script, por ejemplo:
<script src="//initrode.com/widget/loader.js?key=xxxx"></script>
De esa manera, la solicitud del script se puede utilizar para registrar el par de IP clave / fuente y responder las llamadas API posteriores solo si el par de clave / IP coincide con uno registrado (con una vida útil limitada y un límite de solicitudes por día).
No estoy seguro de que sea una buena idea, ya que obviamente es seguridad a través de la ofuscación (alguien que vuelva a cargar el script lo omitirá por completo); pero no veo otra forma de restringir el acceso. No puedo proporcionar una clave única para cada usuario, solo para los socios. No puedo usar un sistema de clave privada ya que todo el código estará disponible para cualquiera. Básicamente está restringiendo el acceso a una API pública, es decir, contradictoria en su definición.
¿Qué opina de esta solución y qué haría con estas restricciones?