Saya memiliki masalah yang sama dengan yang Anda gambarkan. Situs web yang saya bangun dapat diakses dari ponsel dan dari browser sehingga saya membutuhkan api untuk memungkinkan pengguna mendaftar, masuk, dan melakukan beberapa tugas tertentu. Selanjutnya, saya perlu mendukung skalabilitas, kode yang sama berjalan pada proses / mesin yang berbeda.
Karena pengguna dapat MENCIPTAKAN sumber daya (alias tindakan POST / PUT), Anda perlu mengamankan api Anda. Anda dapat menggunakan oauth atau Anda dapat membangun solusi Anda sendiri tetapi perlu diingat bahwa semua solusi dapat dipecahkan jika kata sandi itu benar-benar mudah ditemukan. Ide dasarnya adalah untuk mengotentikasi pengguna menggunakan nama pengguna, kata sandi, dan token, alias apitoken. Apitoken ini dapat dibuat menggunakan node-uuid dan kata sandi dapat di-hash menggunakan pbkdf2
Kemudian, Anda perlu menyimpan sesi di suatu tempat. Jika Anda menyimpannya dalam memori di objek biasa, jika Anda membunuh server dan reboot lagi sesi akan dihancurkan. Juga, ini tidak dapat diskalakan. Jika Anda menggunakan haproxy untuk memuat keseimbangan antar mesin atau jika Anda hanya menggunakan pekerja, status sesi ini akan disimpan dalam satu proses sehingga jika pengguna yang sama dialihkan ke proses / mesin lain, ia perlu melakukan otentikasi lagi. Karena itu Anda perlu menyimpan sesi di tempat umum. Ini biasanya dilakukan dengan menggunakan redis.
Ketika pengguna diautentikasi (nama pengguna + kata sandi + apitoken) buat token lain untuk sesi ini, alias accesstoken. Sekali lagi, dengan node-uuid. Kirim kepada pengguna accesstoken dan userid. Userid (kunci) dan accesstoken (nilai) disimpan dalam redis dengan dan berakhir waktu, misalnya 1 jam.
Sekarang, setiap kali pengguna melakukan operasi menggunakan api sisanya, ia harus mengirim userid dan accesstoken.
Jika Anda mengizinkan pengguna untuk mendaftar menggunakan api sisanya, Anda harus membuat akun admin dengan admin apitoken dan menyimpannya di aplikasi seluler (mengenkripsi nama pengguna + kata sandi + apitoken) karena pengguna baru tidak akan memiliki apitoken ketika mereka mendaftar.
Web juga menggunakan api ini tetapi Anda tidak perlu menggunakan apitokens. Anda dapat menggunakan express dengan toko redis atau menggunakan teknik yang sama seperti dijelaskan di atas, tetapi melewati pemeriksaan apitoken dan kembali ke pengguna, userid + accesstoken dalam cookie.
Jika Anda memiliki area pribadi, bandingkan nama pengguna dengan pengguna yang diizinkan saat mereka mengautentikasi. Anda juga dapat menerapkan peran kepada pengguna.
Ringkasan:
Alternatif tanpa apitoken adalah dengan menggunakan HTTPS dan untuk mengirim nama pengguna dan kata sandi di header Otorisasi dan cache nama pengguna di redis.