Cara terbaik untuk menerapkan otentikasi untuk REST API

21

Kami mengembangkan aplikasi berbasis sosial untuk seluler. Setiap aplikasi mengkonsumsi layanan web API RESTful. Ketika saya menerapkan login saya biasanya menyimpan nama pengguna dan kata sandi di suatu tempat di perangkat. Lalu saya mengirim mereka dan sebagai tanggapan saya mendapatkan akses ke profil saya. Tapi saya juga tahu ada cara lain untuk melakukan ini.

Seseorang entah bagaimana menghasilkan token dengan algoritma tertentu, dan kemudian mengirimkannya alih-alih nama pengguna dan kata sandi untuk mendapatkan akses.

Bagaimana saya menerapkannya? Haruskah saya mengirim token ini bersama dengan setiap permintaan selain login?

Vladimir Stazhilov
sumber
11
Itu otentikasi , bukan otorisasi . Otentikasi = membuktikan bahwa Anda adalah siapa Anda. Otorisasi = membuktikan bahwa Anda diizinkan untuk melakukan apa yang Anda minta.
tdammers
Saya hanya akan menambahkan komentar yang sama ke jawaban! Memberi +1 kepada Anda. Spammer, saya telah mengedit semua konten sehingga otorisasi googling tidak membawa Anda ke sini
Shiplu Mokaddim

Jawaban:

14

Ada beberapa cara bagaimana menerapkan otentikasi dalam konteks RESTful, dan lebih aman untuk mengirim token saja daripada login / kata sandi: Anda dapat dengan mudah membuat token menjadi tidak valid karena batas waktu atau dengan beberapa kriteria lain, dan meminta pengguna untuk mengautentikasi ulang .

Misalnya, permintaan otentikasi REST menggunakan HMAC . Dalam pendekatan ini, klien akan memiliki kunci publik dan rahasia . Untuk semua permintaan yang memerlukan otentikasi , Anda harus menambahkan kunci publik , dan menggunakan kunci rahasia untuk menghitung hash permintaan Anda

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Sekarang server dapat mengidentifikasi permintaan dengan kunci publik dan menghitung requestHash itu sendiri. Jika kedua hash sama, maka pengguna diotorisasi.

Btw, Anda juga harus menggunakan https untuk mengamankan komunikasi melalui jaringan komputer - ini akan secara dramatis mengurangi jumlah kemungkinan masalah.

Akim
sumber