Обзор:
Моя компания разработала API с ограничением скорости. Наша цель двоякая:
- A: Создайте сильную экосистему разработчика вокруг нашего продукта.
- B: продемонстрируйте силу нашего API, используя его для управления нашим собственным приложением.
Уточнение: почему ограничение по скорости вообще?
Мы оцениваем ограничение нашего API, потому что мы продаем его как дополнение к нашему продукту. Анонимный доступ к нашему API имеет очень низкий порог для вызовов API в час, тогда как нашим платным клиентам разрешено более 1000 вызовов в час или более.
Проблема:
Наш API с ограничением скорости отлично подходит для экосистемы разработчика, но для того, чтобы мы могли его дозировать, мы не можем позволить ему ограничиваться одним и тем же ограничением скорости. Передним интерфейсом нашего API является JavaScript, что делает прямые вызовы Ajax API.
Итак, вопрос:
Как вы защищаете api, чтобы ограничение скорости можно было удалить, когда в процессе удаления такого ограничения скорости нельзя легко подделать?
Исследуемые решения (и почему они не работали)
-
Проверьте реферер против заголовка хоста. - Недостаток, потому что referrer легко подделывается.
-
Используйте HMAC для создания подписи на основе запроса и общего секрета, а затем проверьте запрос на сервере. - Недостаток, потому что секрет и алгоритм можно легко определить, посмотрев на JavaScript-интерфейс.
-
Прокси-запрос и подписать запрос в прокси-сервере - все еще ошибочно, поскольку сам прокси предоставляет API.
Вопрос:
Я смотрю на блестящие умы на Stack Overflow, чтобы представить альтернативные решения. Как бы вы решили эту проблему?