Saya masih berusaha menemukan solusi keamanan terbaik untuk melindungi REST API, karena jumlah aplikasi seluler dan API meningkat setiap hari.
Saya telah mencoba berbagai cara otentikasi, tetapi masih memiliki beberapa kesalahpahaman, jadi saya perlu saran dari seseorang yang lebih berpengalaman.
Biarkan saya katakan, bagaimana saya memahami semua hal ini. Jika saya mengerti sesuatu yang salah, tolong beri tahu saya.
Sejauh REST API tidak memiliki kewarganegaraan dan juga WEB pada umumnya, kami perlu mengirim beberapa data auth dalam setiap permintaan (cookie, token ....). Saya tahu tiga mekanisme yang banyak digunakan untuk mengotentikasi pengguna
Token dengan HTTPS. Saya telah menggunakan pendekatan ini berkali-kali cukup baik dengan HTTPS. Jika pengguna memberikan kata sandi dan login yang benar, ia akan menerima token sebagai respons, dan akan menggunakannya untuk permintaan lebih lanjut. Token dihasilkan oleh server dan disimpan, misalnya dalam tabel terpisah atau sama di mana info pengguna disimpan. Jadi untuk setiap server permintaan memeriksa apakah pengguna memiliki token dan itu sama seperti dalam database. Semuanya sangat mudah.
Token JWT. Token ini bersifat deskriptif sendiri, berisi semua informasi yang diperlukan tentang token itu sendiri, pengguna tidak dapat mengubah misalnya tanggal kedaluwarsa atau klaim lain, karena token ini dihasilkan (ditandatangani) oleh server dengan kata kunci rahasia. Ini juga jelas. Tapi satu masalah besar, secara pribadi bagi saya, cara membatalkan token.
OAuth 2. Saya tidak mengerti mengapa pendekatan ini harus digunakan ketika komunikasi dibuat langsung antara server dan klien. Sejauh yang saya mengerti, server OAuth digunakan untuk menerbitkan token dengan lingkup terbatas untuk memungkinkan aplikasi lain mengakses informasi pengguna tanpa menyimpan kata sandi dan login. Ini adalah solusi yang bagus untuk jejaring sosial, ketika pengguna ingin mendaftar di beberapa halaman, server dapat meminta izin untuk mendapatkan info pengguna, misalnya dari twitter atau facebook, dan mengisi bidang pendaftaran dengan data pengguna dan sebagainya.
Pertimbangkan klien seluler untuk toko online.
Pertanyaan pertama yang harus saya pilih JWT daripada jenis pertama token? Sejauh saya memerlukan pengguna login / logout pada klien seluler, saya perlu menyimpan token di suatu tempat atau dalam kasus JWT, token harus dibatalkan pada saat logout. Pendekatan yang berbeda digunakan untuk membatalkan token salah satunya adalah membuat daftar token yang tidak valid (black list). Hmm. Tabel / file akan memiliki ukuran yang jauh lebih besar daripada jika token disimpan dalam tabel dan dikaitkan dengan pengguna, dan baru saja dihapus saat logout.
Jadi apa manfaat token JWT?
Pertanyaan kedua tentang OAuth, haruskah saya menggunakannya jika ada komunikasi langsung dengan server saya? Apa tujuan dari satu lapisan lagi antara klien dan server hanya untuk mengeluarkan token, tetapi komunikasi tidak akan dengan server asli tetapi dengan server utama. Seperti yang saya pahami, server OAuth hanya bertanggung jawab untuk memberikan izin aplikasi pihak ketiga (token) untuk mengakses informasi pribadi pengguna. Tetapi aplikasi klien seluler saya bukan pihak ketiga.