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