Bayangkan kamu bikin aplikasi keren — user bisa daftar, login, dan akses data pribadi mereka. Tapi tanpa sistem autentikasi yang benar, siapa pun bisa mengakses data siapa pun. Serem, kan? Nah, di sinilah JWT Node.js — alias JSON Web Token — hadir sebagai pahlawan tanpa tanda jasa dunia API modern.
Di artikel ke-10 seri Node.js from Zero to Zorro ini, kita akan belajar tuntas autentikasi API Node.js menggunakan JSON Web Token Express. Dari memahami konsep JWT, cara kerjanya, sampai implementasi nyata di project Express.js kamu — semuanya dikupas dengan analogi yang mudah dipahami dan kode yang bisa langsung dipraktikkan.
Siap bikin API kamu jadi benteng yang nggak gampang dibobol? Yuk, mulai! 🚀
🔐 Apa Itu JWT Node.js dan Kenapa Kamu Perlu Tahu?
Coba bayangkan kamu masuk ke sebuah konser. Di pintu masuk, kamu menunjukkan tiket — panitia memeriksa, cap di tanganmu, dan kamu masuk. Setelah itu, kamu nggak perlu terus-menerus menunjukkan tiket ke setiap petugas di dalam — cukup tunjukkan cap di tanganmu sebagai bukti kamu sudah valid.
Begitu kira-kira cara kerja JWT. Saat user login, server memberi "cap" digital berupa token. Token itu dibawa user di setiap request berikutnya — dan server bisa langsung memverifikasinya tanpa perlu cek database lagi.
JWT digunakan oleh lebih dari 70% aplikasi web modern sebagai mekanisme autentikasi utama. Platform seperti Google, GitHub, dan Stripe semuanya menggunakan konsep token-based authentication yang serupa dengan JWT.
Anatomi JWT: Tiga Bagian yang Wajib Kamu Tahu
| Bagian | Isi | Contoh Info |
|---|---|---|
| Header | Algoritma & tipe token | { "alg": "HS256", "typ": "JWT" } |
| Payload | Data user (claims) | { "id": 1, "role": "admin", "exp": ... } |
| Signature | Tanda tangan digital | HMACSHA256(base64(header+payload), secret) |
⚙️ Implementasi Autentikasi API Node.js dengan JWT — Step by Step
Oke, teori sudah cukup. Sekarang kita masuk ke bagian yang paling seru: nulis kode! Kita akan membangun sistem autentikasi lengkap menggunakan JSON Web Token Express dari nol.
Install Package yang Dibutuhkan
Kita butuh dua package utama: jsonwebtoken untuk buat & verifikasi token, dan bcryptjs untuk hash password.
Buat File .env — Simpan Secret Key
Secret key adalah "bumbu rahasia" JWT kamu. Jangan pernah taruh ini langsung di kode!
File .env harus masuk ke .gitignore! Secret key yang bocor ke GitHub adalah salah satu celah keamanan paling umum yang terjadi pada developer pemula. Serius, ini bukan bercanda.
Buat Endpoint Login — Generate JWT Token
Inilah inti dari seluruh proses: saat user login berhasil, kita buat token JWT dan kirim ke client.
Buat Middleware Verifikasi Token
Middleware ini adalah "satpam" di depan pintu endpoint yang dilindungi. Kalau token nggak valid, langsung ditolak.
Proteksi Endpoint dengan Middleware
Sekarang pasang middleware verifyToken ke endpoint yang perlu dilindungi.
Saat mengirim JWT dari client, selalu gunakan format Authorization: Bearer <token> di HTTP header. Format "Bearer" adalah konvensi standar industri yang diikuti hampir semua framework dan library autentikasi.
⚡ JWT vs Session: Mana yang Lebih Cocok untuk Autentikasi API Node.js Kamu?
Ini pertanyaan klasik yang sering muncul di komunitas developer. Jawabannya: tergantung kebutuhan. Tapi biar kamu nggak bingung, ini breakdown komprehensifnya:
- ✅ Tidak perlu session store
- ✅ Cocok untuk microservices & API
- ✅ Bisa dipakai antar domain (CORS)
- ✅ Scalable secara horizontal
- ❌ Sulit di-revoke sebelum expired
- ❌ Payload bisa jadi besar
- ✅ Mudah di-revoke (logout instan)
- ✅ Data sensitif tetap di server
- ✅ Cocok untuk web tradisional
- ✅ Lebih mudah di-debug
- ❌ Butuh session storage (Redis dll)
- ❌ Kurang ideal untuk REST API
Kesimpulan: Untuk REST API dan aplikasi yang butuh scalability, JWT adalah pilihan yang lebih tepat. Untuk aplikasi web tradisional dengan kebutuhan logout instan, session mungkin lebih sesuai.
🛡️ Best Practices JSON Web Token Express yang Wajib Kamu Terapkan
Implementasi JWT yang salah bisa berbahaya. Ini bukan soal "best practice yang bagus kalau dikerjakan" — ini soal keamanan yang harus kamu terapkan dari awal.
JWT Payload TIDAK dienkripsi — hanya di-encode Base64. Artinya siapa pun bisa membaca isinya di jwt.io. Jangan pernah menyimpan password, data kartu kredit, atau informasi sensitif lainnya di dalam payload JWT!
1. Set Waktu Kadaluarsa yang Wajar
Gunakan expiresIn: '15m' untuk access token dan '7d' untuk refresh token. Access token yang pendek meminimalkan risiko jika token dicuri.
2. Gunakan Algoritma yang Aman
Default HS256 sudah cukup baik. Untuk keamanan ekstra di aplikasi enterprise, pertimbangkan RS256 (asymmetric).
3. Simpan Token dengan Aman di Client
Hindari localStorage karena rentan XSS. Gunakan httpOnly Cookie sebagai alternatif yang lebih aman.
4. Implementasikan Refresh Token
Buat sistem dua token: access token (pendek) + refresh token (panjang). Ketika access token expired, gunakan refresh token untuk dapat access token baru tanpa perlu login ulang.
Untuk testing cepat JWT kamu, gunakan tool gratis di jwt.io — kamu bisa decode token dan verifikasi signature langsung di browser. Sangat berguna saat debugging!
Node.js from Zero to Zorro
Artikel ini adalah bagian dari seri belajar Node.js yang komprehensif — dari dasar hingga mahir. Cek seluruh daftar isi di sini:
🗂️ Lihat Semua Artikel Seri →
No comments:
Post a Comment