Langsung ke konten utama

Authentication dan Authorization pada Express.js

 Baiklah, mari kita bahas Bab 5 tentang Authentication dan Authorization dalam pengembangan aplikasi web menggunakan Express.js secara mendalam.

Pentingnya Keamanan dalam Aplikasi Web

Keamanan merupakan aspek yang sangat krusial dalam pengembangan aplikasi web. Di era digital saat ini, serangan siber semakin canggih dan data pengguna menjadi target utama para penjahat. Authentication dan authorization adalah dua pilar utama dalam membangun fondasi keamanan yang kuat untuk aplikasi web Anda. Keduanya bekerja sama untuk memastikan bahwa hanya pengguna yang sah yang dapat mengakses sumber daya dan fitur tertentu.

Konsep Authentication

Authentication adalah proses verifikasi identitas pengguna. Tujuan utama dari authentication adalah untuk memastikan bahwa pengguna yang mencoba mengakses aplikasi web adalah orang yang benar-benar berhak. Proses ini melibatkan beberapa langkah:

  1. Pengguna memasukkan kredensial: Pengguna memberikan informasi identifikasi mereka, seperti nama pengguna (username) dan kata sandi (password).
  2. Verifikasi kredensial: Aplikasi memvalidasi kredensial yang diberikan oleh pengguna dengan data yang tersimpan di basis data. Proses verifikasi ini memastikan bahwa nama pengguna dan kata sandi yang dimasukkan sesuai dengan yang ada di basis data.
  3. Akses diberikan atau ditolak: Jika kredensial yang diberikan valid, pengguna diberikan akses ke aplikasi web. Jika tidak, akses ditolak dan pengguna mungkin diminta untuk memasukkan kembali kredensial mereka atau mengikuti proses pemulihan kata sandi.

Konsep Authorization

Authorization adalah proses pemberian izin akses kepada pengguna setelah mereka berhasil diautentikasi. Tujuan dari authorization adalah untuk mengatur apa yang boleh dan tidak boleh dilakukan oleh pengguna dalam aplikasi web. Proses ini memastikan bahwa pengguna hanya memiliki akses ke sumber daya dan fitur yang sesuai dengan peran atau izin mereka.

Cara Kerja Authorization

  1. Pengguna diautentikasi: Pengguna harus berhasil melewati proses authentication terlebih dahulu sebelum dapat melanjutkan ke tahap authorization.
  2. Pemeriksaan izin: Aplikasi memeriksa izin yang dimiliki oleh pengguna berdasarkan peran atau atribut lainnya. Izin ini dapat berupa hak akses ke halaman tertentu, kemampuan untuk melakukan tindakan tertentu (misalnya, mengedit atau menghapus data), atau kombinasi dari keduanya.
  3. Akses diberikan atau ditolak: Jika pengguna memiliki izin yang sesuai, mereka diberikan akses ke sumber daya atau fitur yang diminta. Jika tidak, akses ditolak dan pengguna mungkin akan melihat pesan kesalahan atau dialihkan ke halaman lain.

Menggunakan Library Populer: Passport.js

Passport.js adalah library Node.js yang sangat populer untuk authentication. Ia menyediakan berbagai strategi authentication yang dapat Anda gunakan, seperti strategi lokal (username/password), OAuth (untuk login melalui Google, Facebook, dan platform lainnya), dan banyak lagi. Passport.js memudahkan Anda untuk mengintegrasikan berbagai metode authentication ke dalam aplikasi Express.js Anda.

Contoh: Menggunakan Passport.js dengan Strategi Lokal

  1. Instalasi:
    Bash
    npm install passport passport-local
    
  2. Konfigurasi:
    JavaScript
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    
    passport.use(new LocalStrategy(
      (username, password, done) => {
        User.findOne({ username: username }, (err, user) => {
          if (err) { return done(err); }
          if (!user) {
            return done(null, false, { message: 'Username tidak ditemukan.' });
          }
          if (!user.validPassword(password)) {
            return done(null, false, { message: 'Password salah.' });
          }
          return done(null, user);
        });
      }
    ));
    
  3. Penggunaan dalam Express.js:
    JavaScript
    app.use(passport.initialize());
    app.use(passport.session());
    
    app.post('/login',
      passport.authenticate('local', { 
        failureRedirect: '/login',
        failureFlash: true 
      }),
      (req, res) => {
        res.redirect('/dashboard');
      });
    

Implementasi Login, Logout, dan Manajemen Sesi

Login

Proses login melibatkan pengiriman kredensial pengguna ke server, verifikasi kredensial tersebut, dan pembuatan sesi jika verifikasi berhasil. Sesi ini akan digunakan untuk menyimpan informasi pengguna yang telah diautentikasi.

Logout

Proses logout menghapus sesi pengguna dari server, sehingga pengguna tidak lagi diautentikasi. Setelah logout, pengguna akan diarahkan kembali ke halaman login atau halaman lain yang sesuai.

Manajemen Sesi

Sesi digunakan untuk menyimpan informasi pengguna yang telah diautentikasi. Informasi ini dapat berupa ID pengguna, nama pengguna, peran, dan informasi lain yang relevan. Dengan menggunakan sesi, aplikasi web dapat "mengingat" pengguna tanpa harus meminta kredensial mereka setiap kali mereka mengakses halaman yang berbeda.


Authentication dan authorization adalah komponen yang sangat penting dalam mengamankan aplikasi web Anda. Dengan menggunakan library seperti Passport.js, Anda dapat dengan mudah mengimplementasikan fitur-fitur keamanan ini.

Komentar

Postingan populer dari blog ini

Membuat Aplikasi Web ASP.NET Core di Visual Studio 2022

Artikel ini membahas langkah-langkah membuat aplikasi ASP.NET Core menggunakan Visual Studio 2022 dan framework .NET 8. 1. Membuka Visual Studio 2022 Buka Visual Studio 2022 dan klik "Create a new project" di layar awal. 2. Memilih Template Proyek Di jendela "Create a new project" , pilih template ASP.NET Core Empty . Template ini memberikan struktur dasar tanpa konfigurasi awal seperti controller, view, atau API. Setelah itu, klik Next . 3. Konfigurasi Proyek Baru Isi informasi proyek seperti berikut: Project Name : Masukkan nama proyek, misalnya FirstCoreWebApplication . Location : Tentukan lokasi folder untuk menyimpan proyek, misalnya D:\Projects . Solution Name : Biasanya sama dengan nama proyek, tetapi bisa diubah jika diperlukan. Centang "Place solution and project in the same directory" jika solusi dan proyek ingin disimpan dalam satu folder. Klik Create untuk melanjutkan. 4. Pengaturan Tambahan Pada jendela "Additional Information...

Remix IDE: Solusi Praktis untuk Menulis dan Deploy Kontrak Pintar

Remix IDE  adalah lingkungan pengembangan terintegrasi berbasis web yang dirancang untuk menulis, mengompilasi, dan menyebarkan smart contract menggunakan bahasa pemrograman  Solidity  di blockchain Ethereum. Alat ini banyak digunakan oleh pengembang blockchain karena kemudahannya dalam menyediakan fitur lengkap untuk pengembangan, pengujian, dan debugging kontrak pintar. Fitur Utama Remix IDE Berbasis Web dan Gratis Tidak perlu diunduh atau diinstal. Anda dapat mengakses Remix langsung melalui browser di  remix.ethereum.org . Karena berbasis web, Remix dapat digunakan di berbagai perangkat selama ada akses internet. Editor Kode Mendukung penulisan kode Solidity dengan penyorotan sintaks, autocompletion, dan validasi kesalahan. Fitur penyorotan kesalahan (error highlighting) memudahkan pengembang untuk menemukan bug pada kode. Compiler Solidity Remix menyediakan compiler bawaan untuk mengonversi kode Solidity menjadi bytecode yang dapat dijalankan di Ethereum Virtual...

Perlu dicatat Built-in Global Variable pada Solidity

Solidity, sebagai bahasa pemrograman untuk membuat smart contract di Ethereum dan blockchain lainnya, menyediakan beberapa variabel global bawaan . Variabel ini memungkinkan akses mudah ke informasi tentang blockchain, transaksi, dan konteks eksekusi. Dengan menggunakan variabel ini, pengembang dapat berinteraksi dengan lingkungan blockchain tanpa perlu menulis banyak kode tambahan. Berikut penjelasan kategori dan variabel global yang umum digunakan: 1. Informasi Blockchain Variabel-variabel ini menyediakan informasi terkait blockchain, seperti blok saat ini dan propertinya. block.number Mengembalikan nomor blok saat ini. Contoh: uint nomorBlokSaatIni = block.number; block.timestamp Waktu pembuatan blok saat ini dalam format detik sejak Unix epoch. Biasanya digunakan untuk mendapatkan waktu saat ini. Contoh: require(block.timestamp >= waktuMulai, "Terlalu awal untuk eksekusi!"); block.difficulty Tingkat kesulitan penambangan pada blok saat ini. Contoh: uin...