Token Web JSON tampak seperti dinding karakter acak, namun hanya berupa tiga bagian JSON yang disandikan. Panduan ini menjelaskan apa yang dimiliki setiap bagian, cara membaca klaim standar, dan perbedaan penting antara mendekode token (aman, apa yang dilakukan alat ini) dan memverifikasinya (membutuhkan rahasia, apa yang dilakukan server).
Tiga bagian token
Pisahkan JWT pada titik-titiknya dan Anda mendapatkan header.payload.signature. tajuk adalah objek JSON kecil yang menggambarkan cara token ditandatangani — alg (algoritma) dan typ (tipe). muatan adalah bagian yang menarik: objek JSON dari klaim yang menjelaskan tentang siapa token itu dan berapa lama kegunaannya. Tanda tangan adalah checksum kriptografi pada dua bagian pertama.
Header dan payload hanya dikodekan, tidak dienkripsi. Base64url dapat dibalik oleh siapa pun, itulah sebabnya dekoder seperti ini dapat menampilkan konten tanpa sandi apa pun.
Klaim standar yang paling sering Anda lihat
Spesifikasi JWT mencadangkan beberapa nama klaim pendek. iss adalah penerbitnya, sub subjeknya (biasanya id pengguna), dan aud adalah audiens yang dituju. Ada tiga stempel waktu: iat (dikeluarkan pada), pengalaman (kedaluwarsa), dan nbf (bukan sebelumnya). Mereka disimpan sebagai detik sejak tahun 1970, itulah sebabnya token mentah menampilkan angka besar seperti 1717000000 alih-alih tanggal — alat ini mengonversinya untuk Anda dan memberi tahu Anda apakah jendela masih terbuka.
Yang lainnya adalah klaim khusus: peran, cakupan, id penyewa, tanda fitur. Mereka benar-benar valid; hanya saja klaim tersebut tidak ditentukan oleh standar, sehingga Tabel Klaim menandainya sebagai kebiasaan.
Ditandatangani tidak dienkripsi
JWT normal (JWS) ditandatangani. Tanda tangan ini berarti server dapat mendeteksi jika ada orang yang mengubah header atau payload — tetapi server tidak melakukan apa pun untuk menyembunyikannya. Perlakukan muatan sebagai publik: jangan pernah memasukkan kata sandi, nomor kartu, atau rahasia di dalamnya. Jika isinya harus dirahasiakan, Anda memerlukan token terenkripsi (JWE), yang memiliki lima segmen dan tidak dapat dibaca tanpa kunci dekripsi.
Mengapa decoding aman tetapi verifikasi tidak
Membaca token tidak memerlukan apa pun selain token, jadi melakukannya di browser Anda bersifat pribadi dan tidak berbahaya. Memverifikasi merupakan pekerjaan yang berbeda: ini membuktikan bahwa token tersebut asli dan belum kedaluwarsa, serta memerlukan rahasia HMAC penerbit (untuk HS256) atau kunci publik (untuk RS256/ES256). Browser tidak dapat menyimpannya dengan aman, dan server tidak boleh mempercayai token yang belum diverifikasi sendiri. Itulah sebabnya alat ini sengaja berhenti pada proses decoding — dan mengapa Anda tidak boleh menempelkan token produksi langsung yang tidak Anda kendalikan, karena siapa pun yang memegang token yang valid biasanya dapat bertindak sebagai Anda.