Мне нужно разработать «виджет», скрипт, который партнеры будут вставлять на свои веб-сайты для отображения некоторого пользовательского интерфейса и выполнения вызовов нашего API.
В основном он будет отображать наши данные на этих сайтах на основе некоторых идентификаторов, которые они предоставляют в наших вызовах API. Чего мы хотели бы избежать, так это того, что кто-то злоупотребляет API и использует его для очистки всего каталога.
Каждому партнеру, который встраивает наш скрипт, будет предоставлен открытый ключ, который необходимо указать при вызове API. Идея состоит в том, чтобы попросить их добавить этот ключ при загрузке скрипта, например:
<script src="//initrode.com/widget/loader.js?key=xxxx"></script>
Таким образом, запрос на скрипт может использоваться для регистрации пары ключ / источник IP и ответа на последующие вызовы API, только если пара ключ / IP совпадает с зарегистрированной (с ограниченным временем жизни и ограничением количества запросов в день).
Я не уверен, что это хорошая идея, так как это, очевидно, безопасность через запутывание (кто-то, перезагружая скрипт, полностью обойдёт его); но я не вижу другого способа ограничить доступ. Я не могу предоставить уникальный ключ каждому пользователю, только партнерам. Я не могу использовать систему с закрытым ключом, так как весь код будет доступен любому. Это в основном ограничение доступа к общедоступному API, то есть противоречивое в его определении.
Что вы думаете об этом решении, и что бы вы сделали с этими ограничениями?