MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Apa cara terbaik untuk mengautentikasi dan mengotorisasi solusi web dan api seperti MERN Stack?

Strategi otorisasi terbaik bergantung pada cakupan aplikasi Anda dalam jangka pendek atau panjang.

Web monolitik atau sederhana dengan login Pribadi

Misalnya, jika Anda hanya memiliki web (MERN) sederhana dengan satu backend sederhana (api rest) atau aplikasi monolitik seperti ini contoh mern dengan login internal atau pribadi di organisasi Anda, strategi otorisasi Anda bisa sesederhana :

  • (1*) /login rute ekspres yang menerima pengguna/kata sandi, memvalidasinya dalam database dan mengembalikan token jwt klasik dan serangkaian opsi (rute reaksi) yang harus diakses oleh pengguna
  • aplikasi web (bereaksi) harus merender halaman yang rutenya cocok dengan rute yang diterima
  • aplikasi web harus mengirim token yang diterima ke pemanggilan titik akhir sisa api
  • ketika api menerima pemanggilan dari web reaksi, harus memvalidasi keberadaan token sebagai header. Jika tidak ada, harus mengembalikan kesalahan 403.
  • (2*) Jika token ada, harus mencoba untuk memvalidasinya (dibentuk dengan baik, tidak kedaluwarsa, tanda tangan yang benar, dll).
  • (3*)Jika ini adalah token yang valid, Anda harus melakukan validasi terakhir:Apakah pengguna dengan peran "tamu" diizinkan untuk menjalankan DELETE ke titik akhir /user/100 .
  • (4*) Solusi klasik adalah memiliki beberapa tabel di database Anda seperti:pengguna, peran, peran_pengguna, izin_peran, izin_option. Tabel opsi harus telah mendaftarkan semua titik akhir api Anda dan metodenya. Juga ini dapat digunakan untuk membuat hubungan antara rute web pengguna <:>. Periksa ini

Persyaratan modern

Organisasi modern dan besar membutuhkan:

  • Login Jaringan Sosial
  • Pengguna Internal/Eksternal
  • Bukan login interaktif (robot, penjadwal, dll)
  • Beberapa aplikasi web
  • Beberapa aplikasi Seluler
  • Banyak Istirahat Api

Untuk kasus ini, aplikasi MERN bukanlah pilihan yang baik karena ALL-IN-ONE. Strategi umum untuk mengimplementasikan persyaratan sebelumnya adalah dengan menempatkan beberapa artefak di beberapa server:

  • aplikasi web (react, vue, angular, linkstart, dll)
  • apis rest (nodejs + expres, java, python, dll)
  • otentikasi/otorisasi:platform/penyedia oauth2, Platform Identitas/Akses, dll

Jika demikian, Anda harus membagi aplikasi MERN menjadi beberapa artefak yang dapat diterapkan:web, api, dan keamanan.

Oauth2

Tidak masalah jika Anda hanya peduli untuk login atau bagaimana memastikan otentikasi dan otorisasi untuk web Anda, apis, dan mungkin aplikasi seluler Anda, Anda akan memerlukan:OAUTH2

Anda dapat mengembangkan platform keamanan Anda sendiri dengan mempertimbangkan (1*), (2*), (3*) y (4*) atau menggunakan sesuatu seperti:

  • auth0
  • penguncian kunci, dll

Detail selengkapnya di sini:https://stackoverflow.com/a/62049409

Pertanyaan Anda

  • metode mana yang menurut Anda lebih baik?
    • Saya pikir jika Anda akan menggunakan auth0, Anda akan menghemat waktu dan tenaga. Dengan auth0 Anda hanya memerlukan aplikasi ekspres sederhana, dengan beberapa titik akhir seperti /login, /callback, dll. Atau jika Anda menggunakan auth0 + passport.js, titik akhir ini dikelola oleh passport.js
    • Saya menyarankan Anda, tinjau cara kerja aliran OAUTH2 sebelum menggunakan auth0 dengan/tanpa paspor. tautan ini banyak membantu saya.
  • Apa perbedaan antara 2 dan 3,
    • Saat saya membaca, auth0 dan platform lain menawarkan layanan manajemen pengguna atau dapat terhubung ke layanan pengguna Anda (AD/LDAP, database, api, dll). Jadi
  • Apakah ada cara untuk menerapkan aturan di paspor (mis. mengalihkan pengguna baru saat login pertama)
    • Ya. Anda dapat menambahkan beberapa logika saat panggilan balik dialihkan di nodejs Anda dengan atau tanpa paspor.
  • Jika saya mengimplementasikan Passport dengan MongoDB, dan database saya memiliki ratusan pengguna, bagaimana cara mengelolanya?
    • Saat ini database mendukung banyak baris. Jadi untuk database produksi Anda, cobalah untuk mengoptimalkan atau memantaunya. Pilihan lainnya adalah menyewa administrator database untuk melakukan tugas-tugas ini.

Referensi




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kode Kesalahan Set Replika 76

  2. MapReduce di PyMongo

  3. Cara Mengoptimalkan Kinerja ClusterControl dan Komponennya

  4. Pelatihan Gagal - Pembelajaran Mesin AWS

  5. Cara memperbarui bidang objek dalam array dengan Mongoose