Apakah JSON Web Token?
JSON Web Token (JWT) ialah sampul padat dan selamat URL untuk muatan tuntutan kecil. Ia ialah format kelayakan standard untuk sesi web tanpa keadaan, token ID OAuth/OIDC, pengesahan API mesin-ke-mesin, dan pautan ajaib yang ditandatangani. JWT sentiasa tiga segmen base64url yang disambung dengan titik: header.payload.signature. Pengepala dan muatan ialah JSON; tandatangan ialah MAC binari atau tandatangan digital ke atas dua segmen pertama.
Bagaimana JWT berfungsi?
Apabila alat ini menyahkod token, ia melalui laluan tiga langkah yang sama yang diikuti oleh setiap perpustakaan JWT:
- Pisahkan token pada titik kepada tepat tiga segmen bukan kosong. Sebarang bentuk lain adalah tidak teratur.
- Nyahkod-base64url segmen 0 dan 1, kemudian
JSON.parsesetiap satu. Pengepala membawa algoritma (alg) dan jenis token (typ). Muatan membawa tuntutan (sub,exp,iat, kunci tersuai). - Jika rahsia diberikan, kirakan semula MAC ke atas
<segment0>.<segment1>menggunakan algoritma dalam pengepala. Bandingkan bait terhadap segmen ketiga. - Kemukakan hasil pengesahan bersama tuntutan yang dinyahkod, termasuk petunjuk tamat tempoh yang boleh dibaca manusia yang dikira daripada tuntutan
exp.
Mengapa nyahkod JWT di pelayar?
Menampalkan JWT sebenar yang sedang digunakan ke dalam pengnyahkod jauh membocorkan kelayakan ke log perkhidmatan itu, timbunan kebolehperhatian, dan mana-mana rakan kongsi yang dikirim data oleh perkhidmatan. Walaupun apabila laman pihak ketiga mendakwa tidak mencatat token, anda tidak ada cara untuk mengesahkannya. Alat ini dibina supaya anda tidak perlu membuat kompromi itu:
- Sifar rangkaian: masa jalan tidak mempunyai panggilan
fetch,XMLHttpRequest, atausendBeacon. Buka DevTools semasa anda menyahkod dan mengesahkan — panel Rangkaian kekal senyap. - Web Crypto asli: pengesahan HMAC menggunakan
crypto.subtle.importKeydancrypto.subtle.sign, primitif yang sama yang akan dipanggil oleh masa jalan anda. - Penempatan statik: setiap halaman ialah fail HTML statik tunggal tanpa titik akhir pelayan untuk dikompromikan. Tiada token untuk dibocorkan kerana tiada pelayan untuk membocorkannya.
Apa yang alat ini sahkan, dan apa yang tidak?
Versi 1 alat ini mengesahkan tandatangan keluarga HMAC-SHA sahaja. Secara khusus:
- Disokong: HS256, HS384, HS512. Berikan rahsia kongsi dan alat akan mengira semula dan membandingkan MAC.
- Belum disokong: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA, dan PS256/384/512 (RSA-PSS). Ini memerlukan kunci awam dalam bentuk PEM atau JWK dan sengaja ditangguhkan ke keluaran susulan.
- Ditolak:
alg: "none". Alat menyahkod token tetapi secara eksplisit menandakannya sebagai tidak selamat — tiada pengesahan tandatangan berlaku, dan mana-mana sistem pengeluaran yang menerima token sedemikian mempunyai kelemahan serius.
Bagaimana contoh penyahkodan JWT kelihatan?
Tampalkan token contoh RFC 7519 kanonik ke dalam medan input di atas:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Pengepala dinyahkod kepada {"alg":"HS256","typ":"JWT"} dan muatan kepada {"sub":"1234567890","name":"John Doe","iat":1516239022}. Masukkan your-256-bit-secret dalam panel pengesahan dan semakan tandatangan mengembalikan sah. Ubah satu aksara rahsia dan ia mengembalikan tidak sah. Tiada satupun ini meninggalkan pelayar anda.
Ini adalah pengnyahkod JWT yang kami inginkan ada apabila kami perlu menyahpepijat token dalam pengeluaran: menghormati privasi, pantas, dan dibina pada primitif yang sama yang digunakan oleh masa jalan.