Saya sedang membangun RESTful API untuk salah satu aplikasi yang saya kelola. Kami sedang mencari untuk membangun berbagai hal ke dalamnya yang membutuhkan akses dan keamanan yang lebih terkontrol. Saat meneliti bagaimana cara mengamankan API, saya menemukan beberapa pendapat berbeda tentang formulir apa yang harus digunakan. Saya telah melihat beberapa sumber daya mengatakan HTTP-Auth adalah cara yang harus dilakukan, sementara yang lain lebih suka kunci API, dan bahkan yang lain (termasuk pertanyaan yang saya temukan di sini di SO) bersumpah demi OAuth.
Kemudian, tentu saja, yang lebih suka, katakanlah, kunci API, katakanlah bahwa OAuth dirancang untuk aplikasi yang mendapatkan akses atas nama pengguna (seperti yang saya pahami, seperti masuk ke situs non-Facebook menggunakan akun Facebook Anda), dan bukan untuk pengguna yang secara langsung mengakses sumber daya di situs yang secara khusus mereka daftarkan (seperti klien Twitter resmi yang mengakses server Twitter). Namun, rekomendasi untuk OAuth tampaknya bahkan untuk kebutuhan autentikasi paling dasar.
Pertanyaan saya, kemudian, adalah - dengan asumsi semuanya dilakukan melalui HTTPS, apa sajakah perbedaan praktis antara ketiganya? Kapan seseorang harus dipertimbangkan di atas yang lain?
sumber
Jawaban:
Semua tergantung dari kebutuhan Anda. Apakah anda membutuhkan:
atau ketiganya?
Jika Anda hanya perlu mengidentifikasi penelepon untuk melacak volume atau jumlah Panggilan API, gunakan Kunci API sederhana. Ingatlah bahwa jika pengguna yang Anda telah menerbitkan kunci API membagikannya dengan orang lain, mereka juga dapat memanggil API Anda.
Namun, jika Anda juga membutuhkan Otorisasi, yaitu Anda hanya perlu memberikan akses ke sumber daya tertentu berdasarkan pemanggil API, lalu gunakan oAuth.
Berikut deskripsi yang bagus: http://www.srimax.com/index.php/do-you-need-api-keys-api-identity-vs-authorization/
sumber
Kunci API atau bahkan Token termasuk dalam kategori mekanisme Autentikasi dan Otorisasi langsung, karena mereka memberikan akses ke sumber daya REST API yang terbuka. Mekanisme langsung seperti itu dapat digunakan dalam kasus penggunaan delegasi.
Untuk mendapatkan akses ke sumber daya atau sekumpulan sumber daya yang diekspos oleh titik akhir REST, diperlukan untuk memeriksa hak istimewa pemohon sesuai dengan identitasnya. Langkah pertama dari alur kerja adalah memverifikasi identitas dengan mengautentikasi permintaan; langkah berturut-turut adalah memeriksa identitas terhadap seperangkat aturan yang ditetapkan untuk mengotorisasi tingkat akses (yaitu membaca, menulis atau membaca / menulis). Setelah langkah-langkah tersebut diselesaikan, perhatian khusus selanjutnya adalah tingkat permintaan yang diizinkan , yang berarti berapa banyak permintaan per detik yang diizinkan untuk dilakukan oleh pemohon terhadap sumber daya yang diberikan.
OAuth (Open Authorization) adalah protokol standar untuk akses yang didelegasikan , sering digunakan oleh Perusahaan Internet besar untuk memberikan akses tanpa memberikan sandi. Jelasnya, OAuth adalah protokol yang memenuhi masalah yang disebutkan di atas: Autentikasi dan Otorisasi dengan memberikan akses yang didelegasikan secara aman ke sumber daya server atas nama pemilik sumber daya. Ini didasarkan pada mekanisme Token akses yang memungkinkan pihak ketiga untuk mendapatkan akses ke sumber daya yang dikelola oleh server atas nama pemilik sumber daya. Misalnya, ServiceX ingin mengakses Akun Google John Smith atas nama John, setelah John memberi otorisasi kepada delegasi; ServiceX kemudian akan mengeluarkan Token berbasis waktu untuk mengakses detail Akun Google, kemungkinan besar hanya dalam akses baca.
Konsep Kunci API sangat mirip dengan Token OAuth yang dijelaskan di atas. Perbedaan utama terletak pada tidak adanya delegasi: Pengguna secara langsung meminta Kunci tersebut ke penyedia layanan untuk interaksi terprogram yang berurutan. Kasus Kunci API juga berdasarkan waktu: Kunci sebagai Token OAuth tunduk pada sewa waktu, atau periode kedaluwarsa. Sebagai aspek tambahan, Kunci dan Token dapat dikenakan pembatasan tarif berdasarkan kontrak layanan, yaitu hanya sejumlah permintaan tertentu per detik yang dapat dilayani.
Singkatnya, pada kenyataannya tidak ada perbedaan nyata antara mekanisme Otentikasi dan Otorisasi tradisional dan versi berbasis Kunci / Token. Paradigmanya sedikit berbeda: alih-alih tetap menggunakan kembali kredensial di setiap dan setiap interaksi antara klien dan server, Key / Token dukungan digunakan yang membuat keseluruhan pengalaman interaksi lebih lancar dan kemungkinan lebih aman (sering kali, mengikuti standar JWT , Kunci dan Token ditandatangani secara digital oleh server untuk menghindari kerajinan).
Kedua kategori menggunakan alur kerja verifikasi identitas tradisional untuk interaksi pertama dengan server yang memiliki sumber daya yang diminati.
sumber