Tutorial
Cara menyahkod JWT tanpa membocorkannya
Sebuah JSON Web Token membawa data sebenar: pengguna yang menerimanya, skop yang diberikannya, bila ia tamat tempoh. Menampalnya ke penyahkod dalam talian sembarangan bermakna menyerahkan data itu, dan selalunya sesi yang masih sah, kepada pelayan yang tidak anda kawal. Penyahkod di bawah berjalan sepenuhnya dalam pelayar anda, jadi anda boleh membaca isi sesuatu token, menyemak sama ada ia telah tamat tempoh, dan mengesahkan tandatangan HMAC apabila anda tahu rahsianya, semuanya tanpa satu pun permintaan rangkaian keluar dari tab anda.
Langkah demi langkah
- Buka penyahkod JWT dan tampal token anda ke dalam kotak input. Sebuah JWT terdiri daripada tiga ketulan Base64Url yang dicantum dengan titik: pengepala, muatan, dan tandatangan. Anda boleh menampalnya dengan awalan Bearer atau tanpanya; alat ini membaca strukturnya dalam kedua-dua keadaan dan terus memberitahu anda jika formatnya salah.
- Baca pengepala dan muatan yang telah dinyahkod. Pengepala menunjukkan algoritma penandatanganan (contohnya HS256 atau RS256) dan id kunci jika ada. Muatan menyenaraikan tuntutan: untuk siapa token itu (sub), siapa yang mengeluarkannya (iss), dan cap masanya. Alat ini menukar medan berangka iat, nbf, dan exp menjadi tarikh yang mudah dibaca serta menanda sama ada token masih sah atau sudah tamat tempoh.

- Jika token menggunakan HS256 dan anda memegang rahsia kongsi, tampal rahsia itu ke dalam medan sahkan dan klik Sahkan. Alat ini mengira semula HMAC ke atas pengepala dan muatan lalu membandingkannya dengan tandatangan, jadi anda tahu sama ada token itu tulen atau telah diganggu. Bagi token RS256 atau ES256, penandatanganan menggunakan kunci peribadi yang tidak anda miliki, jadi alat ini memeriksa tuntutan tetapi tidak mendakwa mengesahkan tandatangan.

Mengapa anda tidak sekali-kali patut menampal token ke laman sembarangan
Sebuah JWT tidak disulitkan. Pengepala dan muatan hanya dikodkan Base64Url, yang bermakna sesiapa yang menerima token boleh membaca setiap tuntutan di dalamnya: e-mel, id pengguna, peranan, bendera dalaman. Jika token ialah token akses yang belum tamat tempoh, sesiapa yang memegangnya boleh memainkannya semula dan bertindak sebagai anda sehingga ia tamat. Apabila anda menampal token yang masih hidup ke penyahkod yang dihoskan, anda menghantar semua itu ke log pelayan tersebut. Menyahkod token pada mesin anda sendiri, tanpa muat naik, ialah satu-satunya cara memeriksanya tanpa meluaskan siapa yang boleh melihatnya. Anda boleh mengesahkan tiada trafik dengan membuka panel rangkaian sambil menyahkod.
Apa yang tandatangan boleh dan tidak boleh beritahu anda
Tandatangan ialah perkara yang menghalang seseorang menyunting tuntutan dan terlepas begitu sahaja. Bagi token HS256, rahsia yang sama menandatangani dan mengesahkan, jadi jika anda tahu rahsianya anda boleh sepenuhnya memastikan token itu sahih di sini juga. Bagi token RS256 dan ES256, sebuah kunci peribadi menandatangani token dan hanya kunci awam yang sepadan mengesahkannya; kunci peribadi tidak pernah meninggalkan pengeluar, jadi alat di sisi klien boleh membaca tuntutan tetapi tidak boleh membuktikan tandatangan secara jujur tanpa kunci awam itu. Anggap muatan yang dinyahkod sebagai tuntutan yang dibuat oleh pengeluar, bukan sebagai bukti, sehingga tandatangan disemak oleh pihak yang memiliki kunci pengesahan. Untuk meng-hash atau membandingkan rahsia secara berasingan, penjana hash di laman ini turut berjalan secara setempat.
Struktur JWT dan apa yang didedahkan setiap bahagian
JWT adalah tiga segmen berkodkan Base64url yang dipisahkan oleh titik: header, payload, dan tandatangan. Header mengisytiharkan jenis token ("JWT") dan algoritma: HS256 (HMAC-SHA-256, rahsia dikongsi) atau RS256 (RSA-SHA-256, pasangan kunci awam/peribadi) adalah yang paling biasa. Payload membawa tuntutan seperti `sub` (subjek, biasanya ID pengguna), `iat` (cap masa Unix dikeluarkan), `exp` (cap masa Unix tamat tempoh), `aud` (khalayak yang dimaksudkan), dan tuntutan aplikasi tersuai seperti peranan atau skop. Base64url bukan penyulitan: ia adalah varian URL-selamat bagi Base64 yang menggantikan `+` dengan `-` dan `/` dengan `_`, serta menghilangkan pelapikan. Sesiapa yang memegang rentetan token mentah boleh mendekod header dan payload tanpa kunci penandatanganan. Hanya segmen tandatangan memerlukan kunci untuk disahkan. Inilah sebabnya mengapa menampal token pengeluaran langsung ke dalam penyahkod dalam talian luar adalah risiko keselamatan: jika `exp` token masih pada masa hadapan dan perkhidmatan mencatat input, sesi yang diwakilinya mungkin terjejas.
Alat yang digunakan dalam panduan ini
- Penyahkod JWTNyahkod JWT (pengepala, muatan, tamat tempoh) tanpa menghantarnya ke mana-mana. Tiada pengesahan tandatangan.
- Penjana HashJana hash MD5, SHA-1, SHA-256, SHA-512 daripada teks atau fail. Tiada muat naik.
- Pemformat JSONFormatkan, sahkan dan minify JSON terus dalam pelayar anda. Tiada muat naik.
Soalan lazim
Adakah token saya dihantar ke mana-mana pelayan apabila saya menyahkodnya?
Tidak. Penyahkod memecahkan token, menyahkod pengepala dan muatan dengan Base64Url, dan memaparkannya dalam ingatan. Pemeriksaan HMAC pilihan menggunakan Web Crypto API terbina dalam pelayar anda. Tiada apa-apa merentasi rangkaian, dan itu penting kerana sebuah JWT selalunya mengandungi data peribadi dan sesi yang masih hidup. Buka panel rangkaian pelayar anda sambil menyahkod dan anda tidak akan nampak satu pun permintaan keluar.
Bolehkah alat ini mengesahkan tandatangan RS256 atau ES256?
Tidak sepenuhnya, dan ia tidak akan berpura-pura. HS256 menggunakan satu rahsia kongsi untuk kedua-dua menandatangani dan mengesahkan, jadi menampal rahsia itu membolehkan alat memastikan tandatangan dalam pelayar anda. RS256 dan ES256 menggunakan kunci peribadi untuk menandatangani dan kunci awam berasingan untuk mengesahkan; alat ini membaca dan mengesahkan tuntutan serta tamat tempoh tetapi berhenti sebelum menegaskan tandatangan yang tidak boleh disemaknya. Bagi token tersebut, sahkan pada perkhidmatan yang memegang kunci awam.