Przegląd:
Moja firma opracowała API z ograniczoną opłatą. Nasz cel jest dwojaki:
- O: Stwórz silny ekosystem programistów wokół naszego produktu.
- B: Zademonstruj możliwości naszego API, używając go do sterowania naszą własną aplikacją.
Wyjaśnienie: po co w ogóle ograniczać stawki?
Ograniczamy nasze API, ponieważ sprzedajemy je jako dodatek do naszego produktu. Anonimowy dostęp do naszego API ma bardzo niski próg wywołań API na godzinę, podczas gdy nasi płatni klienci mają prawo do 1000 lub więcej wywołań na godzinę.
Problem:
Nasz ograniczony cenowo interfejs API świetnie nadaje się do ekosystemu programistów, ale abyśmy mogli go przetestować, nie możemy pozwolić, aby był on ograniczony do tego samego ograniczenia stawki. Front-end naszego API to cały JavaScript, który wykonuje bezpośrednie wywołania Ajax do API.
Więc pytanie brzmi:
Jak zabezpieczyć interfejs API, aby można było usunąć ograniczenie szybkości, gdy w procesie usuwania takiego ograniczenia nie można łatwo sfałszować?
Eksplorowane rozwiązania (i dlaczego nie działają)
Sprawdź stronę odsyłającą z nagłówkiem hosta. - Błąd, ponieważ strona odsyłająca jest łatwa do sfałszowania.
Użyj HMAC, aby utworzyć podpis na podstawie żądania i wspólnego hasła, a następnie zweryfikuj żądanie na serwerze. - Błąd, ponieważ sekret i algorytm można łatwo określić, patrząc na język JavaScript w interfejsie użytkownika.
Proxy żądanie i podpisanie żądania w proxy - nadal wadliwe, ponieważ samo proxy ujawnia API.
Pytanie:
Oczekuję błyskotliwych umysłów w Stack Overflow, aby przedstawić alternatywne rozwiązania. Jak rozwiązałbyś ten problem?