Di era digital saat ini, banyak aplikasi yang saling terhubung dan membutuhkan sistem keamanan yang kuat namun efisien. Salah satu teknologi yang banyak digunakan untuk kebutuhan autentikasi dan otorisasi adalah JWT atau JSON Web Token.
Apa Itu JWT?
JWT (JSON Web Token) adalah format token yang digunakan untuk mengirim data secara aman antar sistem dalam bentuk objek JSON yang sudah ditandatangani secara digital. Token ini umumnya dipakai untuk proses login dan otorisasi akses pengguna.
JWT terdiri dari tiga bagian:
-
Header – berisi informasi tentang algoritma yang digunakan (misalnya HS256).
-
Payload – memuat data atau klaim, seperti ID pengguna atau perannya.
-
Signature – tanda tangan digital yang menjamin bahwa token tidak diubah-ubah.
Mengapa JWT Diperlukan?
Sebelum JWT populer, banyak sistem menggunakan metode session-based authentication. Artinya, setelah pengguna login, data sesi disimpan di server. Namun metode ini memiliki keterbatasan:
-
Sulit digunakan pada sistem terdistribusi atau berbasis microservices.
-
Tidak fleksibel untuk aplikasi modern seperti SPA (Single Page Application).
-
Butuh memori tambahan untuk menyimpan sesi.
JWT hadir sebagai solusi yang lebih ringan dan praktis. Token menyimpan semua informasi yang dibutuhkan, sehingga server tidak perlu menyimpan sesi. Sistem ini disebut stateless — cocok untuk aplikasi modern yang skalanya besar.
Kelebihan JWT Dibandingkan Metode Lain
-
Tidak Bergantung pada Server (Stateless)
Server tidak perlu menyimpan data sesi. Token bisa diverifikasi langsung menggunakan tanda tangan digital. -
Cocok untuk Sistem Terdistribusi
Ideal digunakan di lingkungan microservices atau REST API. -
Format Ringan dan Mudah Ditangani
JWT hanya berupa string yang bisa dikirim lewat HTTP header. -
Bisa Digunakan untuk Autentikasi dan Otorisasi
Token dapat menyimpan peran pengguna, sehingga kontrol akses bisa dilakukan tanpa mengecek database. -
Mudah Digunakan di Berbagai Platform
JWT adalah standar terbuka, dapat diimplementasikan di banyak bahasa pemrograman.
Keunggulan Utama JWT
Keunggulan terbesar JWT adalah kemampuannya untuk membawa informasi secara aman tanpa beban penyimpanan di sisi server. Token ini cocok digunakan di sistem yang butuh fleksibilitas tinggi dan bekerja lintas platform, seperti aplikasi mobile, frontend-backend terpisah, hingga layanan API.
JWT juga dapat diatur masa berlakunya (expired), serta bisa dikombinasikan dengan token refresh agar tetap aman meskipun token utama sudah habis masa aktifnya.
Apakah JWT Aman?
JWT menawarkan keamanan yang baik, asalkan digunakan dengan benar. Keamanannya didukung oleh:
-
Penggunaan algoritma kriptografi seperti HS256 atau RSA.
-
Penandatanganan digital untuk mencegah perubahan isi token.
-
Pengaturan masa berlaku token (
exp
) untuk mencegah penyalahgunaan.
Namun, ada hal-hal penting yang harus diperhatikan:
-
Selalu gunakan HTTPS untuk mengirim token.
-
Hindari menyimpan token di tempat yang mudah diakses oleh skrip berbahaya (seperti
localStorage
jika ada risiko XSS). -
Pastikan sistem memverifikasi tanda tangan token dengan benar.
Dengan praktik yang benar, JWT bisa menjadi bagian penting dari sistem keamanan aplikasi Anda.
JWT bisa tidak aman karena mencantumkan terlalu banyak informasi sensitif di dalam payload-nya.
Masalah pada token tersebut:
-
Menyimpan password dalam token
Ini kesalahan fatal. Password seharusnya tidak pernah disimpan atau dikirim, apalagi dalam token. -
Terlalu banyak data pribadi
Informasi seperti email, alamat rumah, nomor HP, dan kartu kredit tidak seharusnya berada di dalam JWT, apalagi jika hanya menggunakan signed JWT (bukan encrypted). -
Risiko token bocor
Jika token ini sampai bocor (misalnya lewat headerAuthorization
), maka seluruh informasi di dalamnya bisa dibaca oleh siapa saja, karena payload JWT bisa dengan mudah didekode oleh siapapun.
JWT dapat di-decode, misalnya menggunakan tools yag tersedia secara online seperti https://jwt.io/
Best Practice:
Hanya sertakan informasi minimum yang dibutuhkan, seperti
user_id
danrole
.Jangan pernah menyimpan password, data keuangan, atau informasi pribadi di payload.
Jika memang perlu menyimpan data sensitif, gunakan JWE (JSON Web Encryption), bukan hanya JWS (JSON Web Signature)
JWT adalah solusi modern yang sangat berguna untuk proses autentikasi dan otorisasi di berbagai jenis aplikasi. Sifatnya yang ringan, fleksibel, dan aman menjadikannya pilihan utama dalam membangun sistem yang efisien dan mudah diskalakan. Meski begitu, penerapannya tetap harus mengikuti standar keamanan agar sistem tetap terlindungi dari risiko penyalahgunaan.
Meskipun sistem sudah menggunakan JWT untuk autentikasi, tetap penting untuk memastikan URL dan input pengguna terlindungi dari serangan seperti URL injection. JWT hanya mengamankan proses identitas dan otorisasi, namun tidak menggantikan kebutuhan validasi dan sanitasi input secara menyeluruh.