Tôi phải thiết kế một "widget", một tập lệnh mà các đối tác sẽ nhúng vào trang web của họ để hiển thị một số UI và thực hiện các cuộc gọi tới API của chúng tôi.
Về cơ bản, nó sẽ hiển thị dữ liệu của chúng tôi trên các trang web này dựa trên một số ID mà chúng cung cấp trong các lệnh gọi API của chúng tôi. Điều chúng tôi muốn tránh là ai đó lạm dụng API và sử dụng nó để cạo toàn bộ danh mục của chúng tôi.
Mỗi đối tác nhúng tập lệnh của chúng tôi sẽ được cung cấp một khóa công khai phải được cung cấp khi gọi API. Một ý tưởng sẽ là yêu cầu họ nối thêm khóa này khi tải tập lệnh, ví dụ:
<script src="//initrode.com/widget/loader.js?key=xxxx"></script>
Bằng cách đó, yêu cầu cho tập lệnh có thể được sử dụng để đăng ký cặp IP khóa / nguồn và chỉ trả lời các cuộc gọi API tiếp theo nếu cặp khóa / IP khớp với một cặp đã đăng ký (với thời gian giới hạn và giới hạn yêu cầu mỗi ngày).
Tôi không chắc đó là một ý tưởng hay vì rõ ràng nó bảo mật thông qua obfuscation (ai đó tải lại tập lệnh sẽ hoàn toàn bỏ qua nó); nhưng tôi không thấy cách nào khác để hạn chế quyền truy cập. Tôi không thể cung cấp một khóa duy nhất cho mọi người dùng, chỉ cho các đối tác. Tôi không thể sử dụng hệ thống khóa riêng vì tất cả mã sẽ có sẵn cho bất kỳ ai. Về cơ bản, nó hạn chế quyền truy cập vào API công khai, nghĩa là mâu thuẫn trong định nghĩa của nó.
Bạn nghĩ gì về giải pháp này, và bạn sẽ làm gì với những hạn chế này?