Di era API RESTful dan layanan mikro, mengamankan endpoint Anda sangat penting. Salah satu metode populer dan efektif untuk memastikan bahwa hanya pengguna yang berwenang yang dapat mengakses sumber daya tertentu adalah melalui otentikasi Bearer Token. Dalam blog ini, kita akan menjelajahi cara mengimplementasikan otentikasi Bearer Token dalam aplikasi Node.js menggunakan Express. Kita akan membahas dasar-dasar Bearer Token, cara menyiapkannya di aplikasi Anda, dan praktik terbaik untuk memastikan arsitektur keamanan yang kuat.
Apa Itu Otentikasi Bearer Token?
Otentikasi Bearer Token melibatkan penerbitan token setelah otentikasi pengguna, yang harus disertakan oleh klien dalam header Authorization dari permintaan berikutnya. Token ini bertindak sebagai "pembawa" kredensial, yang berarti bahwa siapa pun yang memiliki token dapat memperoleh akses ke sumber daya terkait. JSON Web Tokens (JWT) adalah bentuk Bearer Token yang umum digunakan karena sifatnya yang stateless dan fleksibilitasnya.
Langkah 1: Menyiapkan Aplikasi Node.js dan Express Anda
Sebelum kita menyelami implementasi Bearer Token, mari kita siapkan aplikasi Node.js dan Express dasar. Kita akan mulai dengan menginisialisasi proyek baru dan menginstal dependensi yang diperlukan.
1. Inisialisasi Proyek Baru:
mkdir express-bearer-token && cd express-bearer-token
npm init -y
2. Instal Paket yang Diperlukan:
npm install express body-parser jsonwebtoken
express
: Framework web untuk Node.js.jsonwebtoken
: Pustaka untuk menandatangani, memverifikasi, dan mendekode JWT.body-parser
: Middleware untuk mengurai body permintaan yang masuk.
3. Siapkan Server Dasar:
Buat file index.js
dan siapkan server Express:
const express = require('express');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const app = express();
const PORT = 3000;
const SECRET_KEY = 'your_secret_key';
app.use(bodyParser.json());
app.get('/', (req, res) => {
res.send('Selamat Datang di Tutorial Otentikasi Bearer Token!');
});
app.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Langkah 2: Menghasilkan JWT
Pertama dan terutama, Anda perlu membuat endpoint untuk login pengguna untuk menghasilkan dan mengirim kembali token JWT. Demi kesederhanaan, kita akan menggunakan pengguna dummy.
1. Tambahkan Rute Login:
const users = {
user1: { username: 'user1', password: 'password1' } // Pengguna dummy
};
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users[username];
if (user && user.password === password) {
const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).send('Kredensial tidak valid');
}
});
Langkah 3: Melindungi Rute dengan Bearer Token
Untuk melindungi rute tertentu, Anda memerlukan middleware yang memvalidasi Bearer Token dari permintaan yang masuk.
1. Buat Middleware Otentikasi:
Buat fungsi middleware untuk memverifikasi token Bearer. Middleware ini akan memeriksa header Authorization
dalam permintaan yang masuk dan memverifikasi token menggunakan kunci rahasia.
const authenticateToken = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]; // Bearer <token>
if (token == null) return res.sendStatus(401); // Tidak ada token
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) return res.sendStatus(403); // Token tidak valid
req.user = user;
next();
});
};
2. Membuat Rute:
Buat rute untuk login dan rute yang dilindungi yang memerlukan otentikasi.
const users = [
{ id: 1, username: 'user1', password: 'password1' },
{ id: 2, username: 'user2', password: 'password2' }
];
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
return res.status(400).send('Username atau password salah');
}
const token = jwt.sign({ username: user.username }, 'your_jwt_secret_key', { expiresIn: '1h' });
res.json({ token });
});
app.get('/protected', authenticateToken, (req, res) => {
res.send('Ini adalah rute yang dilindungi');
});
Langkah 4: Menguji Implementasi
Jalankan server Anda:
node app.js
Untuk menguji implementasi:
- Login: Kirim permintaan POST ke
/login
dengan body JSON yang berisiusername
danpassword
yang valid. Jika kredensial benar, Anda akan menerima JWT. - Akses Rute yang Dilindungi: Kirim permintaan GET ke
/protected
dengan headerAuthorization
diatur keBearer <your_token>
. Jika token valid, Anda akan dapat mengakses rute yang dilindungi.
Menguji Otentikasi Bearer Token API dengan Apidog
Otentikasi token Bearer adalah metode umum yang digunakan dalam aplikasi web untuk mengamankan permintaan API. Apidog, alat API serbaguna, menyederhanakan proses ini, memungkinkan pengembang untuk mengotentikasi permintaan API dengan mudah. Berikut adalah panduan langkah demi langkah tentang cara Anda dapat menguji otentikasi token Bearer API menggunakan Apidog.
Langkah 1: Menyiapkan Apidog
- Unduh dan Instal Apidog: Unduh Apidog dan ikuti instruksi instalasi untuk sistem operasi Anda.
- Buat Proyek Baru: Buka Apidog dan buat proyek baru tempat Anda dapat mengelola permintaan dan pengujian API Anda.
Langkah 2: Menambahkan Token Bearer ke Permintaan API
1. Pilih Otentikasi Token Bearer: Di dasbor proyek, buat permintaan API baru. Navigasikan ke "Auth", dan pilih "Bearer Token" dari dropdown.
2. Masukkan Token: Masukkan langsung nilai token Anda. Apidog secara otomatis memberinya awalan dengan "Bearer" untuk permintaan sebenarnya.
3. Kirim Permintaan: Dengan token Bearer yang diatur, kirim permintaan. Apidog akan menyertakan token dalam header otorisasi, memungkinkan Anda untuk mengakses sumber daya yang dilindungi.
Langkah 3: Memverifikasi Respons
Setelah mengirim permintaan, periksa respons untuk memastikan bahwa panggilan API berhasil. Status 200 OK biasanya menunjukkan otentikasi yang berhasil.

Mengapa Memilih Bearer Token untuk Otentikasi API?
Otentikasi token Bearer banyak dipilih untuk otentikasi API karena beberapa keuntungan:
- Statelessness: Token Bearer memungkinkan server untuk mengotentikasi permintaan tanpa mempertahankan status sesi, sehingga lebih mudah untuk menskalakan aplikasi.
- Kesederhanaan: Token mudah diimplementasikan dan digunakan, biasanya disertakan dalam header HTTP Authorization.
- Keamanan: Token dapat dienkripsi dan memiliki waktu kedaluwarsa, meningkatkan keamanan.
- Interoperabilitas: Token Bearer distandarisasi dan dapat digunakan di berbagai platform dan layanan, mempromosikan interoperabilitas.
Manfaat ini menjadikan token Bearer sebagai opsi yang kuat dan fleksibel untuk mengamankan API.
Praktik Terbaik untuk Keamanan Bearer Token
1. Gunakan Kunci Rahasia yang Kuat:
Pastikan kunci rahasia Anda yang digunakan untuk menandatangani JWT kompleks dan disimpan dengan aman. Hindari hardcoding di basis kode Anda—pertimbangkan untuk menggunakan variabel lingkungan.
2. Kedaluwarsa Token:
Selalu tetapkan waktu kedaluwarsa untuk token untuk meminimalkan risiko penyalahgunaan jika dicuri. Putar dan batalkan token secara teratur.
3. HTTPS:
Gunakan HTTPS untuk melindungi data saat transit, termasuk Token Bearer, memastikan enkripsi antara klien dan server.
4. Penyimpanan Aman:
Di sisi klien, simpan token dengan aman. Cookie HTTP-only dan Secure seringkali merupakan pilihan terbaik daripada penyimpanan lokal atau penyimpanan sesi.
5. Pembatasan Laju dan Pemantauan:
Terapkan pembatasan laju untuk mencegah serangan brute force. Selain itu, pantau API Anda untuk setiap upaya akses yang tidak sah.
6. Daftar Hitam Token yang Dikompromikan:
Pertahankan mekanisme untuk membatalkan token, seperti daftar hitam, jika ada kebutuhan untuk mencabut akses segera.
Kesimpulan
Otentikasi Bearer Token menggunakan JWT dalam aplikasi Node.js dan Express menyediakan pendekatan yang kuat dan terukur untuk mengamankan API Anda. Dengan mengikuti langkah-langkah yang diuraikan dalam blog ini, Anda dapat mengimplementasikan otentikasi berbasis token yang aman dan secara efektif melindungi sumber daya Anda.
Keamanan adalah proses berkelanjutan, dan sementara Bearer Token menawarkan banyak keuntungan, selalu tetap terinformasi tentang praktik terbaik dan ancaman keamanan terbaru. Dengan fondasi ini, Anda berada di jalur yang benar untuk membangun API yang aman, terukur, dan efisien di Node.js menggunakan Express.