Jika Anda ingin melindungi konten sensitif di aplikasi Node, Anda memerlukan cara untuk mengautentikasi pengguna. Namun, membangun sistem autentikasi Anda sendiri itu rumit, dan memakan waktu serta jika tidak dilakukan dengan benar dapat menimbulkan kerentanan keamanan pada aplikasi Anda. Alat pihak ketiga seperti Passport membuat autentikasi menjadi lebih mudah
Dalam tutorial ini, Anda akan mempelajari cara mengimplementasikan autentikasi di Node menggunakan Passport dan MongoDB
Apa itu Otentikasi dan Otorisasi?
Meskipun autentikasi dan otorisasi terkadang digunakan secara bergantian, kedua konsep keamanan ini memiliki arti yang berbeda. Otentikasi adalah proses memverifikasi pengguna adalah siapa yang mereka klaim sementara otorisasi adalah proses menentukan apakah pengguna yang diautentikasi memiliki akses ke bagian tertentu dari aplikasi Anda
Apa itu Paspor. js?
Paspor. js (atau Paspor) adalah middleware otentikasi untuk NodeJS yang menyediakan lebih dari 500 strategi untuk mengautentikasi pengguna termasuk paspor-lokal yang menggunakan nama pengguna dan kata sandi
Tutorial ini menggunakan passport-local dan passport-jwt untuk mengamankan rute
Cara Mengatur Otentikasi Pengguna di NodeJS
Sekarang Anda tahu sedikit tentang otentikasi pengguna dan Paspor. js, kita bisa melihat cara mengatur autentikasi di NodeJS. Di bawah ini, kami telah menguraikan langkah-langkah yang harus Anda ambil
Langkah 1. Siapkan Server Node
Buat folder bernama user-auth-nodejs dan arahkan ke sana menggunakan terminal Anda
mkdir user-auth-nodejscd user-auth-nodejs
Selanjutnya inisialisasi paket. json
npm init _Karena Anda akan menggunakan Express, kerangka kerja backend NodeJS, instal dengan menjalankan perintah berikut
npm i expressSekarang buat file, app. js, dan tambahkan kode berikut untuk membuat server
const express = require("express");const app = express();
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
Terkait. Pelajari Cara Menginstal Npm dan Node. js di Ubuntu
Langkah 2. Siapkan Basis Data
Anda memerlukan database untuk menyimpan data pengguna. Anda akan menggunakan luwak untuk membuat skema data MongoDB yang menentukan struktur dan tipe data yang akan Anda simpan di database. Karena Anda menyimpan data pengguna, buat skema pengguna
Instal luwak
npm i mongoose _Buat file baru, userModel. js, dan tambahkan berikut ini
const mongoose = require('mongoose')const {Schema} = mongoose
const UserSchema = new Schema ({
email: {
type: String,
required: true
},
password: {
type: String,
required: true
}
})
const UserModel = mongoose.model('user', UserSchema);
module.exports = UserModel;
Terkait. Cara Membuat Database dan Koleksi di MongoDB
Sebelum menyimpan kata sandi, Anda perlu mengenkripsinya untuk tujuan keamanan. Anda akan menggunakan bcryptjs, paket npm yang sangat berguna yang memudahkan bekerja dengan kata sandi terenkripsi
Instal bcryptjs
npm i bcryptjs _Ubah model pengguna. js untuk mengenkripsi kata sandi sebelum menyimpannya ke database
const mongoose = require('mongoose')const bcrypt = require('bcryptjs');
const {Schema} = mongoose
const UserSchema = new Schema ({
...
})
UserSchema.pre('save', async function(next) {
try {
// check method of registration
const user = this;
if (!user.isModified('password')) next();
// generate salt
const salt = await bcrypt.genSalt(10);
// hash the password
const hashedPassword = await bcrypt.hash(this.password, salt);
// replace plain text password with hashed password
this.password = hashedPassword;
next();
} catch (error) {
return next(error);
}
});
...
const User = mongoose.model('User', UserSchema);
Di sini Anda menggunakan pre save hook untuk mengubah kata sandi sebelum disimpan. Idenya adalah untuk menyimpan versi hash dari kata sandi alih-alih kata sandi teks biasa. Hash adalah string kompleks panjang yang dihasilkan dari string teks biasa
Gunakan isModified untuk memeriksa apakah kata sandi berubah karena Anda hanya perlu mencirikan kata sandi baru. Selanjutnya, buat garam dan berikan dengan kata sandi teks biasa ke metode hash untuk menghasilkan kata sandi hash. Terakhir, ganti kata sandi teks biasa dengan kata sandi hash di database
Buat db. js dan konfigurasikan database
const mongoose = require("mongoose");mongoose.Promise = global.Promise;
const dbUrl = "mongodb://localhost/user";
const connect = async () => {
mongoose.connect(dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on("error", () => {
console.log("could not connect");
});
db.once("open", () => {
console.log("> Successfully connected to database");
});
};
module.exports = { connect }; _
Dalam aplikasi. js, sambungkan ke database
// connect to dbconst db = require('./db');
db.connect(); _
Langkah 3. Siapkan Paspor
Instal Paspor dan paspor-lokal. Anda akan menggunakan paket ini untuk mendaftar dan login pengguna
Buat file baru, passportConfig. js, dan import passport-local dan userModel. js
npm init _1Konfigurasikan Paspor untuk menangani pendaftaran pengguna
npm init _2Pada kode di atas, Anda memeriksa apakah email sudah digunakan. Jika email tidak ada, daftarkan pengguna. Perhatikan bahwa Anda juga menyetel bidang nama pengguna untuk menerima email. Secara default, passport-local mengharapkan nama pengguna, jadi Anda harus memberi tahu bahwa Anda mengirimkan email sebagai gantinya
Gunakan paspor-lokal untuk juga menangani login pengguna
npm init _3Di sini, periksa apakah pengguna ada di database, dan jika ya, periksa apakah kata sandi yang diberikan cocok dengan yang ada di database. Perhatikan bahwa Anda juga memanggil metode matchPassword() pada model pengguna, jadi buka userModel. js dan menambahkannya
npm init _4Metode ini membandingkan kata sandi dari pengguna dan yang ada di database dan mengembalikan nilai true jika cocok
Langkah 4. Siapkan Rute Otentikasi
Anda sekarang perlu membuat titik akhir yang akan dikirimi data oleh pengguna. Pertama adalah rute pendaftaran yang akan menerima email dan kata sandi pengguna baru
Dalam aplikasi. js, gunakan middleware otentikasi paspor yang baru saja Anda buat untuk mendaftarkan pengguna
npm init _5 npm init 6Terkait. Otentikasi vs. Otorisasi. Apa bedanya?
Jika berhasil, rute pendaftaran harus mengembalikan pengguna yang dibuat
Selanjutnya, buat rute login
npm init _7Langkah 5. Tambahkan Rute Terlindungi
Sejauh ini, Anda telah menggunakan Passport untuk membuat middleware yang mendaftarkan pengguna di database dan lainnya yang memungkinkan pengguna terdaftar untuk masuk. Selanjutnya, Anda akan membuat middleware otorisasi untuk melindungi rute sensitif menggunakan token web JSON (JWT). Untuk menerapkan otorisasi JWT, Anda perlu melakukannya
- Hasilkan token JWT
- Berikan token kepada pengguna. Pengguna akan mengirimkannya kembali dalam permintaan otorisasi
- Verifikasi token yang dikirim kembali oleh pengguna
Anda akan menggunakan paket jsonwebtoken untuk menangani JWT
Jalankan perintah berikut untuk menginstalnya
npm i jsonwebtoken
Selanjutnya, buat token untuk setiap pengguna yang berhasil masuk
Dalam aplikasi. js, impor jsonwebtoken dan ubah rute login seperti di bawah ini
npm init _8Dalam aplikasi kehidupan nyata, Anda akan menggunakan kunci rahasia yang lebih rumit dan menyimpannya dalam file konfigurasi
Rute masuk mengembalikan token jika berhasil
Gunakan paspor-jwt untuk mengakses rute yang dilindungi
npm init _9Di passportConfig. js, konfigurasikan paspor-jwt
npm i express 0Perhatikan Anda mengekstraksi JWT dari header otorisasi alih-alih badan permintaan. Ini mencegah peretas mencegat permintaan dan mengambil token
Untuk melihat bagaimana rute penjaga paspor-jwt, buat rute yang dilindungi di aplikasi. js
npm i express 1Hanya permintaan dengan JWT yang valid yang mengembalikan data pengguna
Sekarang Anda Siap Membawa Otentikasi Pengguna Anda ke Tingkat Selanjutnya
Dalam tutorial ini, Anda mempelajari cara mengautentikasi pengguna menggunakan email dan kata sandi dengan bantuan Passport. Ini mungkin tampak menakutkan pada awalnya, tetapi prosesnya relatif mudah. Anda dapat melangkah lebih jauh dan menggunakan penyedia identitas pihak ketiga yang didukung oleh Passport seperti Twitter, Facebook, dan Google