Apa itu JWT? Penjelasan Lengkap tentang JSON Web Token
Jawaban Cepat
JWT adalah string dengan tiga bagian berkode Base64URL yang dipisahkan oleh titik: header.payload.signature. Header menentukan algoritme, payload berisi klaim (ID pengguna, peran, kedaluwarsa), dan tanda tangan membuktikan keaslian. JWT digunakan untuk otentikasi tanpa kewarganegaraan. Gunakan Dekoder JWT gratis kami untuk memeriksa konten token di browser Anda.
Perkenalan
JWT (JSON Web Token) adalah format token aman URL yang ringkas dan ditentukan oleh RFC 7519 untuk mengirimkan informasi antar pihak dengan aman sebagai objek JSON. JWT banyak digunakan untuk otentikasi dan otorisasi dalam aplikasi web: setelah pengguna masuk, server mengeluarkan JWT yang disertakan klien dalam permintaan berikutnya untuk membuktikan identitas. JWT tidak memiliki kewarganegaraan — server tidak perlu mencari token di database; token itu sendiri berisi klaim pengguna dan tanda tangan yang membuktikan bahwa token itu tidak dirusak.
Langkah demi Langkah
-
Pahami struktur tiga bagian
JWT memiliki tiga bagian: header (algoritma dan tipe), payload (klaim), dan tanda tangan (membuktikan integritas). Setiap bagian dikodekan Base64URL dan dipisahkan oleh titik: eyJhbGciOi...J9.eyJzdWIi...J9.signature. Dua bagian pertama dapat dibaca oleh siapa saja yang memiliki token; hanya tanda tangan yang memerlukan kunci rahasia.
-
Pelajari klaim standar
Payload berisi klaim — pernyataan tentang subjek. Klaim standar: 'sub' (subjek/ID pengguna), 'iat' (dikeluarkan pada stempel waktu), 'exp' (kedaluwarsa), 'nbf' (bukan sebelumnya), 'iss' (penerbit), 'aud' (audiens). Klaim khusus dapat mencakup peran, izin, atau data lainnya.
-
Memahami algoritma penandatanganan
JWT menggunakan penandatanganan simetris (HS256 — rahasia bersama) atau asimetris (RS256, ES256 — pasangan kunci publik/pribadi). Tanda tangan mencegah gangguan: mengubah bagian mana pun dari token akan membatalkan tanda tangan. Hanya pemegang kunci rahasia/pribadi yang dapat membuat token yang valid.
-
Gunakan JWT untuk otentikasi
Setelah login, server membuat JWT dan mengirimkannya ke klien. Klien menyertakan JWT di header Otorisasi (token Pembawa) untuk permintaan berikutnya. Server memverifikasi tanda tangan dan memeriksa kedaluwarsa — tidak diperlukan pencarian basis data.
Contoh
__TETAP_18__ struktur
Masukan: Tipikal JWT
Keluaran: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
Header yang didekodekan
Masukan: Bagian pertama diterjemahkan
Keluaran: {"alg": "HS256", "typ": "JWT"}
Muatan yang didekodekan
Masukan: Bagian kedua diterjemahkan
Keluaran: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Masalah Umum
- Decoding vs verifikasi —decoding JWT (membaca isinya) TIDAK membuktikan keasliannya. Selalu verifikasi sisi server tanda tangan dengan kunci rahasia sebelum mempercayai klaim.
- Menyimpan JWT di Penyimpanan lokal —ini membuatnya dapat diakses oleh JavaScript, rentan terhadap serangan XSS. Simpan di cookie httpOnly untuk keamanan yang lebih baik.
- Token berumur panjang —jika token dicuri, token tersebut tetap berlaku hingga habis masa berlakunya. Gunakan token akses berumur pendek (15-60 menit) dengan token penyegaran untuk sesi yang panjang.
- Data sensitif dalam payload —payload dapat dibaca oleh siapa saja yang memiliki token (adalah Base64, tidak dienkripsi). Jangan pernah memasukkan kata sandi, kartu kredit, atau rahasia ke dalam payload.
Kiat
- Selalu verifikasi sisi server tanda tangan JWT sebelum memercayai klaim apa pun — decoding saja bukanlah autentikasi.
- Gunakan token akses yang berumur pendek (15-60 menit) dengan token penyegaran untuk sesi yang panjang untuk meminimalkan kerusakan akibat pencurian token.
- Simpan JWT di cookie httpOnly, Secure, SameSite, bukan localStorage untuk mencegah serangan XSS.
- Gunakan Dekoder JWT kami untuk memeriksa konten token untuk proses debug —token Anda tidak pernah keluar dari browser Anda.