Überblick:
Mein Unternehmen hat eine ratenbegrenzte API entwickelt. Unser Ziel ist zweierlei:
- A: Erstellen Sie ein starkes Entwickler-Ökosystem rund um unser Produkt.
- B: Demonstrieren Sie die Leistungsfähigkeit unserer API, indem Sie damit unsere eigene Anwendung steuern.
Klarstellung: Warum überhaupt ein Ratenlimit?
Wir begrenzen unsere API, weil wir sie als Ergänzung zu unserem Produkt verkaufen. Der anonyme Zugriff auf unsere API hat einen sehr niedrigen Schwellenwert für API-Aufrufe pro Stunde, während unseren bezahlten Kunden mehr als 1000 Anrufe pro Stunde oder mehr gestattet sind.
Das Problem:
Unsere ratenbegrenzte API eignet sich hervorragend für das Entwickler-Ökosystem, aber damit wir sie mit Hundefutter füttern können, können wir nicht zulassen, dass sie auf dieselbe ratenbegrenzte API beschränkt wird. Das Front-End unserer API besteht ausschließlich aus JavaScript und führt direkte Ajax-Aufrufe an die API durch.
Die Frage ist also:
Wie sichern Sie eine API, damit die Ratenbegrenzung entfernt werden kann, während das Entfernen einer solchen Ratenbegrenzung nicht einfach gefälscht werden kann?
Explored Solutions (und warum sie nicht funktionierten)
Überprüfen Sie den Referrer anhand des Host-Headers. - Fehlerhaft, da der Überweiser leicht gefälscht werden kann.
Verwenden Sie eine HMAC , um eine Signatur basierend auf der Anforderung und einem gemeinsamen Geheimnis zu erstellen, und überprüfen Sie dann die Anforderung auf dem Server. - Fehlerhaft, da das Geheimnis und der Algorithmus leicht durch einen Blick in das Front-End-JavaScript ermittelt werden können.
Proxy der Anfrage und Signieren der Anfrage im Proxy - Immer noch fehlerhaft, da der Proxy selbst die API verfügbar macht.
Die Frage:
Ich freue mich auf die brillanten Köpfe von Stack Overflow, um alternative Lösungen vorzustellen. Wie würden Sie dieses Problem lösen?