Apa itu JWT? Panduan Lengkap JSON Web Token
Apa itu JWT?
JSON Web Token (JWT) adalah standar terbuka (RFC 7519) yang mendefinisikan cara yang ringkas dan mandiri untuk mengirimkan informasi secara aman antara pihak-pihak sebagai objek JSON. JWT adalah format token dominan dalam aplikasi web modern, digunakan untuk segala hal mulai dari autentikasi pengguna dan otorisasi API hingga pertukaran data yang aman antara microservice.
Cara Kerja Autentikasi JWT
Autentikasi JWT mengikuti pola stateless yang menghilangkan kebutuhan akan penyimpanan sesi di sisi server. Memahami alur ini adalah kunci untuk memahami mengapa JWT telah menjadi pilihan default untuk keamanan API modern.
Alur Autentikasi
- Pengguna login — Klien mengirimkan kredensial (nama pengguna dan kata sandi) ke server autentikasi.
- Server membuat JWT — Server memvalidasi kredensial, membuat JWT yang berisi identitas dan izin pengguna, menandatanganinya dengan kunci rahasia atau kunci privat, dan mengembalikannya ke klien.
- Klien menyimpan token — Klien menyimpan JWT, biasanya di localStorage, sessionStorage, atau HTTP-only cookie.
- Klien mengirim token dengan setiap permintaan — Untuk setiap permintaan API berikutnya, klien menyertakan JWT di header
Authorizationmenggunakan skema Bearer:Authorization: Bearer <token>. - Server memverifikasi token — Server memverifikasi signature JWT, memeriksa waktu kedaluwarsa, dan mengekstrak klaim pengguna untuk mengotorisasi permintaan.
- Tidak perlu pencarian sesi — Karena JWT berisi semua informasi yang diperlukan, server tidak perlu melakukan query ke database atau cache untuk mengidentifikasi pengguna.
Mengapa Ini Penting
Autentikasi berbasis sesi tradisional menyimpan ID sesi di memori atau database server. Setiap permintaan yang diautentikasi memerlukan pencarian. JWT menghilangkan pencarian ini — token itu sendiri membuktikan identitas pengguna. Ini membuat sistem berbasis JWT dapat diskalakan secara inheren karena server mana pun dalam klaster dapat memverifikasi token tanpa status sesi bersama.
JWT vs Autentikasi Berbasis Sesi
| Aspek | Autentikasi JWT | Autentikasi Berbasis Sesi | |-------|-----------------|---------------------------| | Penyimpanan | Sisi klien (dalam token) | Sisi server (dalam memori atau DB) | | Skalabilitas | Tidak perlu penyimpanan sesi bersama | Memerlukan penyimpanan sesi bersama antar instance | | Lintas domain | Bekerja secara alami lintas domain | Sulit berbagi sesi | | Ramah mobile | Ya (tidak perlu cookie) | Memerlukan dukungan cookie | | Pencabutan | Sulit (sampai token kedaluwarsa) | Mudah (hapus sesi dari penyimpanan) | | Ukuran payload | Lebih besar per permintaan (token di header) | Minimal (hanya ID sesi) |
Mengapa JWT Digunakan untuk Keamanan API
Karakteristik yang membuat JWT cocok untuk autentikasi juga membuatnya ideal untuk mengamankan API.
Stateless dan Dapat Diskalakan
Setiap JWT membawa semua informasi yang dibutuhkan server untuk mengotorisasi permintaan. Tidak ada database sesi untuk di-query, tidak ada cache untuk diperiksa, tidak ada status untuk disinkronkan di seluruh server. Load balancer dapat merutekan permintaan ke instance server mana pun tanpa koordinasi.
Lintas Domain dan Lintas Origin
JWT bekerja secara alami di berbagai domain dan origin. Token yang diterbitkan oleh auth.example.com dapat digunakan untuk mengakses api.example.com dan admin.example.com. Ini menjadikan JWT sebagai dasar sistem single sign-on (SSO).
Otorisasi yang Terperinci
Payload JWT dapat menyertakan klaim khusus untuk peran, izin, dan keanggotaan organisasi:
{
"sub": "user_abc123",
"role": "admin",
"permissions": ["read:users", "write:users", "delete:users"],
"org_id": "org_xyz789",
"iat": 1516239022,
"exp": 1516325422
}
Server API membaca klaim ini langsung dari token tanpa pencarian tambahan.
JWT untuk Single Sign-On (SSO)
Single sign-on adalah salah satu kasus penggunaan JWT yang paling umum. Dalam arsitektur SSO yang umum:
- Pengguna login ke identity provider (IdP) — seperti Auth0, Okta, atau Keycloak.
- IdP menerbitkan JWT yang ditandatangani dengan kunci privatnya.
- Pengguna menyajikan JWT ini ke beberapa aplikasi.
- Setiap aplikasi memverifikasi signature menggunakan kunci publik IdP.
- Setiap aplikasi mempercayai token tanpa berkomunikasi dengan IdP pada setiap permintaan.
Pola ini memungkinkan satu login memberikan akses ke puluhan layanan — email, penyimpanan file, manajemen proyek, sistem HR — tanpa setiap layanan menerapkan alur login sendiri.
Praktik Terbaik Keamanan JWT
Meskipun JWT memberikan dasar yang kuat untuk keamanan API, implementasi yang benar sangat penting.
Gunakan Token Berumur Pendek
Tetapkan klaim exp (expiration) ke durasi pendek — 15 menit hingga 1 jam untuk token akses. Gunakan refresh token berumur lebih panjang (hari atau minggu) untuk mendapatkan token akses baru tanpa memerlukan pengguna untuk autentikasi ulang.
Selalu Gunakan HTTPS
JWT tidak mengenkripsi payload-nya. Siapa pun yang mencegat token dapat mendekode dan membaca isinya. Selalu kirimkan JWT melalui HTTPS untuk mencegah pencegatan.
Validasi Semuanya
Selalu verifikasi signature, periksa bahwa token belum kedaluwarsa, konfirmasi aud (audience) cocok dengan aplikasi Anda, dan tolak token dengan algoritma yang tidak diharapkan.
Simpan Token dengan Aman
Di sisi klien, simpan JWT di HTTP-only cookie jika memungkinkan, atau di memori untuk single-page application. Hindari localStorage untuk token yang memberikan akses ke data sensitif.
Kesalahpahaman Umum tentang JWT
"JWT dienkripsi." — Tidak. JWT ditandatangani, bukan dienkripsi. Payload di-encode dengan base64url, yang bersifat reversibel. JWE (JSON Web Encryption) menyediakan enkripsi, tetapi ini adalah spesifikasi terpisah yang tidak dicakup oleh JWT standar.
"JWT mencegah CSRF." — Tidak dengan sendirinya. JWT di header Authorization membantu, tetapi jika token berada di cookie, perlindungan CSRF tetap diperlukan.
"JWT hanya untuk autentikasi." — JWT digunakan untuk autentikasi, tetapi juga untuk pertukaran data otorisasi, sesi stateless, dan berbagi informasi yang aman antara layanan.
Dekode dan Jelajahi JWT Secara Online
Gunakan alat JWT decoder untuk memeriksa JSON Web Token apa pun. Tempelkan token Anda dan lihat header, payload, dan algoritma signature yang didekode secara instan. Alat ini membantu Anda memahami data apa yang dibawa token Anda dan memverifikasi bahwa token tersebut terstruktur dengan benar.