Eu tenho que criar um "widget", um script que os parceiros incorporarão em seus sites para exibir alguma interface do usuário e fazer chamadas para nossa API.
Basicamente, ele exibirá nossos dados nesses sites com base em alguns códigos que eles fornecem em nossas chamadas de API. O que gostaríamos de evitar é alguém abusar da API e usá-la para raspar a totalidade do nosso catálogo.
Cada parceiro que incorporar nosso script receberá uma chave pública que deve ser fornecida ao chamar a API. Uma idéia seria pedir que eles acrescentassem essa chave ao carregar o script, por exemplo:
<script src="//initrode.com/widget/loader.js?key=xxxx"></script>
Dessa forma, a solicitação do script pode ser usada para registrar o par de IP de chave / fonte e atender chamadas subseqüentes da API apenas se o par de chave / IP corresponder a um registrado (com uma vida útil limitada e um limite de solicitações por dia).
Não tenho certeza se é uma boa ideia, pois é obviamente segurança através da ofuscação (alguém que recarrega o script o ignora completamente); mas não vejo outra maneira de restringir o acesso. Não posso fornecer uma chave exclusiva para todos os usuários, apenas para parceiros. Não posso usar um sistema de chave privada, pois todo o código estará disponível para qualquer pessoa. É basicamente restringir o acesso a uma API pública, ou seja, contraditório em sua definição.
O que você acha dessa solução e o que você faria com essas restrições?