JSON Web Token (JWT) sering dipakai untuk membawa informasi autentikasi antara aplikasi dan server. Formatnya ringkas, mudah dikirim melalui HTTP, dan dapat diverifikasi tanpa harus menyimpan seluruh data sesi di setiap layanan. Namun, JWT bukan jaminan keamanan otomatis. Kesalahan validasi, masa berlaku terlalu panjang, atau penyimpanan yang ceroboh dapat membuat token yang dicuri bisa digunakan untuk menyamar sebagai pengguna.
Panduan ini membahas cara kerja JWT, batasannya, dan praktik yang perlu diperiksa ketika membangun aplikasi web atau API.
Apa itu JWT?
JWT adalah format token ringkas yang membawa sejumlah klaim (claims), misalnya identitas penerbit, subjek, penerima, atau waktu kedaluwarsa. Standarnya dijelaskan dalam RFC 7519. Server dapat menerbitkan token setelah autentikasi berhasil, lalu layanan penerima memeriksa token itu sebelum memberikan akses.
JWT sendiri bukan sistem login lengkap. Ia hanya format untuk menyampaikan klaim. Aplikasi tetap harus menentukan siapa yang boleh memperoleh token, izin apa yang diberikan, bagaimana token diverifikasi, dan bagaimana akses dicabut ketika diperlukan.
Tiga bagian utama JWT
JWT dalam bentuk ringkas yang umum digunakan biasanya terlihat seperti tiga bagian yang dipisahkan tanda titik: header.payload.signature.
- Header: memuat informasi seperti jenis token dan algoritma yang digunakan untuk membuat tanda tangan.
- Payload: berisi klaim, misalnya
subuntuk subjek,issuntuk penerbit,auduntuk penerima, sertaexpuntuk waktu kedaluwarsa. - Signature: memungkinkan penerima memeriksa apakah token dibuat oleh pihak yang memegang kunci yang sesuai dan apakah bagian yang ditandatangani berubah.
Hal penting yang sering disalahpahami: tanda tangan tidak sama dengan enkripsi. Pada JWT bertanda tangan yang umum digunakan, header dan payload hanya dikodekan dengan Base64URL, sehingga isinya dapat dibaca oleh siapa pun yang memegang token. Jangan memasukkan kata sandi, kunci rahasia, atau informasi pribadi yang tidak perlu. Jika kerahasiaan payload benar-benar diperlukan, pahami format enkripsi JWT dan pastikan implementasinya sesuai kebutuhan.
Bagaimana JWT digunakan dalam API?
Alurnya biasanya dimulai ketika pengguna login melalui mekanisme autentikasi aplikasi. Setelah kredensial diverifikasi, server menerbitkan access token dengan klaim dan masa berlaku tertentu. Klien kemudian mengirimkannya saat meminta sumber daya, sering kali melalui header Authorization: Bearer. API memverifikasi tanda tangan, memeriksa klaim penting, lalu menilai apakah pengguna berhak melakukan tindakan yang diminta.
Validasi tidak boleh berhenti pada pemeriksaan tanda tangan. Layanan perlu memeriksa masa berlaku, penerbit dan penerima yang diharapkan, serta hak akses untuk operasi atau objek yang diminta. Token valid tidak otomatis berarti penggunanya boleh membaca semua data. Prinsip ini sejalan dengan panduan keamanan API dan perlindungan endpoint web.
Risiko yang perlu diwaspadai
1. Token bocor
JWT yang dicuri dapat digunakan sampai kedaluwarsa atau dicabut. Kebocoran bisa terjadi melalui log, laporan error, ekstensi browser berbahaya, skrip lintas situs (XSS), tangkapan layar, atau URL yang tersimpan di riwayat. Jangan menaruh token di query string dan jangan mencatat token utuh ke log.
2. Validasi algoritma yang lemah
Jangan menerima algoritma hanya karena namanya tercantum dalam header token. Server harus menetapkan daftar algoritma yang diizinkan dan memverifikasi token dengan konfigurasi yang sesuai. Gunakan pustaka JWT yang terawat dan ikuti panduan keamanan implementasinya, bukan menulis proses kriptografi sendiri.
3. Masa berlaku terlalu panjang
Token yang berlaku lama memperpanjang jendela penyalahgunaan jika token dicuri. Access token sebaiknya berumur pendek sesuai risiko dan kebutuhan pengalaman pengguna. Jika aplikasi menggunakan refresh token, lindungi token tersebut lebih ketat, rotasikan bila didukung, dan deteksi penggunaan ulang yang mencurigakan.
4. Menganggap JWT mudah dicabut
JWT mandiri tidak otomatis memberi tahu semua layanan bahwa token harus dibatalkan. Jika pencabutan segera penting, rancang mekanisme seperti daftar pencabutan, pemeriksaan status token, atau gunakan sesi server maupun token referensi yang statusnya dapat diperiksa. Pilihan ini menambah kompleksitas, jadi sesuaikan dengan dampak risiko dan skala sistem.
Checklist praktik aman
- Wajibkan HTTPS. Lindungi token saat dikirim dan jangan menonaktifkan pemeriksaan sertifikat TLS.
- Validasi klaim penting. Periksa tanda tangan, algoritma yang diizinkan,
iss,aud,exp, dannbfjika digunakan. - Minimalkan isi token. Simpan hanya klaim yang diperlukan; data sensitif lebih baik tetap berada di server.
- Kelola kunci dengan benar. Simpan kunci penandatanganan di sisi server atau secret manager, batasi akses, dan siapkan rotasi kunci.
- Pilih penyimpanan klien secara sadar. Token di
localStoragedapat dibaca skrip yang berjalan pada origin yang sama, sehingga XSS menjadi risiko besar. CookieHttpOnly,Secure, danSameSitedapat mengurangi paparan tertentu, tetapi aplikasi tetap perlu menilai risiko CSRF dan desain sesi secara menyeluruh. - Uji skenario kegagalan. Pastikan token kedaluwarsa, tanda tangan salah, penerbit tidak dikenal, dan klaim penerima yang keliru selalu ditolak.
- Siapkan respons insiden. Tentukan cara mencabut akses, merotasi kunci, meninjau log, dan meminta pengguna masuk kembali ketika token diduga bocor.
Kapan JWT menjadi pilihan yang tepat?
JWT dapat berguna ketika beberapa layanan perlu memverifikasi klaim secara konsisten atau ketika format token ringkas memudahkan integrasi. Namun, token mandiri bukan selalu pilihan terbaik. Untuk aplikasi sederhana dengan kebutuhan logout langsung, sesi server tradisional bisa lebih mudah dikendalikan. Bandingkan kebutuhan skalabilitas, pencabutan, privasi, dan kompleksitas operasional sebelum memilih arsitektur.
Jika autentikasi melibatkan layanan pihak ketiga, pahami pula izin yang diberikan melalui layar persetujuan OAuth. JWT dan OAuth berkaitan dalam beberapa arsitektur, tetapi keduanya bukan hal yang sama: JWT adalah format token, sedangkan OAuth adalah kerangka otorisasi.
Kesimpulan
JWT memudahkan pertukaran klaim, tetapi keamanan tetap bergantung pada implementasi. Gunakan pustaka tepercaya, validasi seluruh klaim yang relevan, batasi masa berlaku, lindungi penyimpanan token, dan rencanakan pencabutan akses. Untuk referensi implementasi tambahan, baca OWASP JSON Web Token Cheat Sheet serta standar RFC 7519.
PENGALAMAN BARU Coba tampilan baru Penasaran dengan pengalaman membaca Nazuaf versi modern? Coba tampilan baru yang dirancang agar nyaman dibaca dari ponsel dan pc. Buka versi modern dan lanjutkan membaca artikel ini. Jelajahi tampilan baru Nazuaf versi modern · Ketuk kartu untuk mencoba