Memperluas Tipe Autentikasi
Ikhtisar
NocoBase mendukung perluasan tipe autentikasi pengguna sesuai kebutuhan. Autentikasi pengguna umumnya memiliki dua tipe: pertama, identifikasi pengguna diselesaikan di dalam aplikasi NocoBase, seperti login dengan password dan login dengan SMS; kedua, identifikasi pengguna dilakukan oleh layanan pihak ketiga, dan hasilnya diberitahukan ke aplikasi NocoBase melalui callback, seperti metode autentikasi OIDC dan SAML. Alur autentikasi dari kedua tipe metode autentikasi ini di NocoBase pada dasarnya adalah sebagai berikut:
Tanpa Bergantung pada Callback Pihak Ketiga
- Klien menggunakan SDK NocoBase untuk memanggil antarmuka login
api.auth.signIn(), melakukan request ke antarmuka loginauth:signIn, dan secara bersamaan membawa identifier authenticator yang sedang digunakan ke backend melalui request headerX-Authenticator. - Antarmuka
auth:signInmeneruskan ke tipe autentikasi yang sesuai berdasarkan identifier authenticator pada request header, dan metodevalidatedalam class autentikasi yang didaftarkan oleh tipe autentikasi tersebut akan melakukan pemrosesan logika yang sesuai. - Klien mendapatkan informasi pengguna dan
tokenautentikasi dari respons antarmukaauth:signIn, menyimpantokenke Local Storage, dan menyelesaikan login. Langkah ini diselesaikan secara otomatis oleh SDK secara internal.
Bergantung pada Callback Pihak Ketiga
- Klien mendapatkan URL login pihak ketiga melalui antarmuka yang didaftarkan sendiri (misalnya
auth:getAuthUrl), dan membawa informasi seperti nama aplikasi dan identifier authenticator sesuai protokol. - Pengalihan ke URL pihak ketiga untuk menyelesaikan login. Layanan pihak ketiga memanggil antarmuka callback aplikasi NocoBase (perlu didaftarkan sendiri, misalnya
auth:redirect), mengembalikan hasil autentikasi, dan juga mengembalikan informasi seperti nama aplikasi dan identifier authenticator. - Metode antarmuka callback mem-parse parameter untuk mendapatkan identifier authenticator, mendapatkan class autentikasi yang sesuai melalui
AuthManager, lalu memanggil metodeauth.signIn()secara aktif. Metodeauth.signIn()akan memanggil metodevalidate()untuk memproses logika otentikasi. - Metode callback mendapatkan
tokenautentikasi, lalu mengarahkan kembali ke halaman frontend dengan 302, dengan membawatokendan identifier authenticator dalam parameter URL,?authenticator=xxx&token=yyy.
Berikut adalah penjelasan tentang cara mendaftarkan antarmuka server dan antarmuka pengguna klien.
Server
Antarmuka Autentikasi
Kernel NocoBase menyediakan registrasi dan manajemen tipe autentikasi yang dapat diperluas. Pemrosesan logika inti dari plugin login yang diperluas memerlukan inheritance dari class abstrak Auth di kernel dan mengimplementasikan antarmuka standar yang sesuai.
Referensi API lengkap Auth.
Kernel juga mendaftarkan operasi resource dasar terkait autentikasi pengguna.
Dalam banyak kasus, tipe autentikasi pengguna yang diperluas juga dapat menggunakan logika autentikasi JWT yang sudah ada untuk menghasilkan kredensial akses API pengguna. Class BaseAuth di kernel telah mengimplementasikan dasar dari class abstrak Auth, lihat BaseAuth. Plugin dapat langsung melakukan inheritance dari class BaseAuth untuk menggunakan kembali sebagian kode logika dan mengurangi biaya pengembangan.
Data Pengguna
Saat mengimplementasikan logika autentikasi pengguna, biasanya melibatkan pemrosesan data pengguna. Dalam aplikasi NocoBase, secara default tabel terkait didefinisikan sebagai:
Biasanya, untuk memperluas metode login, gunakan users dan usersAuthenticators untuk menyimpan data pengguna terkait. Hanya pada kasus khusus saja perlu menambahkan Collection sendiri.
Field utama dari usersAuthenticators adalah:
Untuk operasi pencarian dan pembuatan pengguna, model data AuthModel dari authenticators juga membungkus beberapa metode yang dapat digunakan dalam class CustomAuth melalui this.authenticator[nama metode]. Referensi API lengkap AuthModel.
Registrasi Tipe Autentikasi
Metode autentikasi yang diperluas perlu didaftarkan ke modul manajemen autentikasi.
Klien
Antarmuka pengguna klien didaftarkan melalui antarmuka registerType yang disediakan oleh klien plugin autentikasi pengguna:
Formulir Login

Jika beberapa authenticator dengan tipe autentikasi yang berbeda telah mendaftarkan formulir login, mereka akan ditampilkan dalam bentuk Tab. Judul Tab adalah judul authenticator yang dikonfigurasi di backend.

Tombol Login

Biasanya tombol login pihak ketiga, sebenarnya bisa berupa komponen apa pun.
Formulir Pendaftaran

Jika perlu beralih dari halaman login ke halaman pendaftaran, Anda harus menanganinya sendiri di komponen login.
Formulir Manajemen Backend

Bagian atas adalah konfigurasi authenticator umum, dan bagian bawah adalah bagian formulir konfigurasi kustom yang dapat didaftarkan.
Antarmuka Request
Untuk melakukan request antarmuka terkait autentikasi pengguna di sisi klien, Anda dapat menggunakan SDK yang disediakan oleh NocoBase.
Referensi API detail @nocobase/sdk - Auth.

