Gambaran:
Perusahaan saya telah mengembangkan API dengan tarif terbatas. Tujuan kami ada dua:
- J: Ciptakan ekosistem pengembang yang kuat di sekitar produk kami.
- B: Mendemonstrasikan kekuatan API kami dengan menggunakannya untuk menjalankan aplikasi kami sendiri.
Klarifikasi: Mengapa rate-limit sama sekali?
Kami menilai batas API kami, karena kami menjualnya sebagai tambahan untuk produk kami. Akses anonim ke API kami memiliki ambang yang sangat rendah untuk panggilan API per jam, sedangkan pelanggan berbayar kami diizinkan lebih dari 1000 panggilan per jam atau lebih.
Masalah:
API terbatas tarif kami sangat bagus untuk ekosistem pengembang, tetapi agar kami dapat melakukan dogfood, kami tidak dapat mengizinkannya dibatasi ke pembatasan tarif yang sama. Bagian depan API kami adalah semua JavaScript, membuat panggilan Ajax langsung ke API.
Jadi pertanyaannya adalah:
Bagaimana Anda mengamankan api sehingga pembatasan kecepatan dapat dihapus di mana dalam proses menghapus pembatasan kecepatan tidak dapat dengan mudah dipalsukan?
Solusi yang Dijelajahi (dan mengapa tidak berhasil)
Verifikasi perujuk terhadap header host. - Cacat karena perujuk mudah dipalsukan.
Gunakan HMAC untuk membuat tanda tangan berdasarkan permintaan dan rahasia bersama, lalu verifikasi permintaan di server. - Cacat karena rahasia dan algoritme akan mudah ditentukan dengan melihat ke JavaScript front end.
Proksi permintaan dan tanda tangani permintaan di proxy - Masih cacat, karena proxy itu sendiri mengekspos API.
Pertanyaan:
Saya mencari pemikiran brilian di Stack Overflow untuk menyajikan solusi alternatif. Bagaimana Anda mengatasi masalah ini?