Saya sedang mengembangkan REST API yang membutuhkan otentikasi. Karena otentikasi itu sendiri terjadi melalui layanan web eksternal melalui HTTP, saya beralasan bahwa kami akan mengeluarkan token untuk menghindari panggilan berulang kali ke layanan otentikasi. Yang membawa saya dengan rapi ke pertanyaan pertama saya:
Apakah ini benar-benar lebih baik daripada hanya meminta klien untuk menggunakan HTTP Basic Auth pada setiap permintaan dan panggilan cache ke sisi server layanan otentikasi?
Solusi Basic Auth memiliki keuntungan karena tidak memerlukan perjalanan bolak-balik penuh ke server sebelum permintaan konten dapat dimulai. Token berpotensi dapat lebih fleksibel dalam cakupannya (yaitu hanya memberikan hak untuk sumber daya atau tindakan tertentu), tetapi itu tampaknya lebih sesuai dengan konteks OAuth daripada kasus penggunaan saya yang lebih sederhana.
Saat ini token diperoleh seperti ini:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
Itu api_key
, timestamp
dan verifier
dibutuhkan oleh semua permintaan. The "verifier" dikembalikan oleh:
sha1(timestamp + api_key + shared_secret)
Maksud saya adalah untuk hanya mengizinkan panggilan dari pihak yang dikenal, dan untuk mencegah panggilan digunakan kembali kata demi kata.
Apakah ini cukup bagus? Underkill? Berlebihan?
Dengan token di tangan, klien dapat memperoleh sumber daya:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Untuk panggilan yang sesederhana mungkin, ini sepertinya sangat bertele-tele. Mempertimbangkan shared_secret
keinginan untuk menyematkan (minimal) aplikasi iOS, yang saya anggap dapat diekstraksi, apakah ini bahkan menawarkan sesuatu di luar rasa aman yang palsu?