Alat pembangun · JWT penyahkod
Base64 vs Base64url: Mengapa JWT Gagal dalam Penyahkod Standard Base64
· Bagaimana ia berfungsi
jwt asas64 pengekodan
Tampalkan segmen JWT ke dalam penyahkod base64 biasa dan ia mungkin mengadu tentang aksara atau padding. Siaran ini menerangkan mandat varian base64url JWS dan cara menukar antara keduanya.
Aksara tidak sah, padding tidak betul — ralat yang muncul apabila base64 bertemu base64url
Mesej "aksara tidak sah" atau "lapik tidak betul" selalunya bermaksud segmen JWT diberikan kepada penyahkod yang menjangkakan Base64 biasa. Token boleh disalin dengan betul. Perwakilannya mengikut konvensyen base64url, manakala utiliti penerima menerima abjad yang berkaitan tetapi tidak sama atau berkeras pada pelapik eksplisit.
ToolAcre mengelakkan ketidakpadanan itu untuk pengepala dan muatan. Penyahkod baitnya mengalih keluar ruang kosong, menterjemahkan simbol selamat URL, memulihkan padding yang ditinggalkan apabila panjang membenarkannya, kemudian menukar bait sebagai UTF-8 yang ketat. Kegagalan pada mana-mana peringkat menjadi ralat INVALID_JWT dan bukannya pengecualian pelayar mentah.
Dua abjad — tambah dan sengkang berbanding sempang dan garis bawah, dan sebab URL memaksa perubahan itu
Standard Base64 menggunakan tambah dan slash untuk dua kedudukan abjad terakhirnya. Base64url memberikan tanda sempang dan garis bawah pada kedudukan yang sama. Nilai enam-bit asas tidak berubah, jadi menterjemahkan `-` kepada `+` dan `_` kepada `/` mengekalkan setiap bait yang dinyahkod; sahaja perubahan ejaan selamat pengangkutan.
Penggantian tersebut penting dalam saluran yang tambah atau slash sudah mempunyai sintaks. Ejaan selamat URL mengurangkan tafsiran tidak sengaja melalui pemprosesan bentuk atau laluan. Ia tidak menambah kerahsiaan, integriti atau ketulenan. Sesiapa sahaja yang menerima segmen boleh membalikkan penggantian dan memulihkan bait yang sama tanpa kunci kriptografi.
Padding — mengapa JWS menanggalkan tanda yang sama dan cara memulihkannya untuk penyahkod yang ketat
ToolAcre menerima padding yang ditinggalkan. Selepas penormalan abjad, ia memeriksa modulo empat panjang segmen. Baki dua memerlukan dua tanda sama, dan baki tiga memerlukan satu. Baki satu adalah mustahil untuk nilai Base64 yang lengkap dan ditolak sebagai rentetan terpotong dan bukannya meneka ke dalam bentuk.
Pemulihan padding ialah pembingkaian mekanikal, bukan pembaikan token. Menambah tanda sama tidak boleh memulihkan aksara yang hilang semasa penyalinan, dan penyahkodan bait yang berjaya tidak menunjukkan bahawa bait datang daripada pengeluar. Pelaksanaan sahaja membina semula panjang kanonik yang diperlukan oleh penyahkod pelayar sebelum memanggil `atob`.
Menyahkod keseluruhan token sekali gus — kesilapan tidak membelah pada titik terlebih dahulu
Token yang ditandatangani padat mesti dibelah pada titiknya sebelum mana-mana segmen dinyahkodkan. Melewati `header.payload.signature` kepada fungsi Base64 memperkenalkan titik-titik milik JWT siri, bukan sama ada abjad Base64. ToolAcre memerlukan tepat tiga segmen untuk input berbentuk JWS ini dan melaporkan kiraan yang diperhatikan apabila struktur itu tiada.
Sarung lima bahagian menerima mesej JWE yang berasingan kerana siri padat yang disulitkan bukanlah objek yang sama. Dua atau empat bahagian sebaliknya mencadangkan pemotongan atau input yang salah. Semakan struktur ini dilakukan sebelum tafsiran JSON, memastikan ralat salinan berbeza daripada teks yang dikodkan salah bentuk atau JSON yang salah bentuk.
Contoh yang berkesan — menukar satu segmen daripada base64url kepada base64, mengalasnya dan menyahkodnya kepada JSON
Untuk penukaran yang berjaya, ambil `eyJhbGciOiJIUzI1NiJ9`. Ia tidak mengandungi aksara abjad yang berbeza antara varian, tetapi pelapiknya yang hilang masih menggambarkan saluran paip. Panjangnya membenarkan pemulihan padding; penyahkodan menghasilkan UTF-8 bait untuk `{"alg":"HS256"}` dan JSON penghuraian menghasilkan objek dengan satu sifat `alg`.
Segmen yang mengandungi sempang atau garis bawah mengikuti urutan yang sama dengan penggantian dua simbol terlebih dahulu. ToolAcre melakukan operasi ini di dalam `base64ToBytes`, kemudian `decodeSegment` menghuraikan teks yang terhasil. Algoritma yang dipaparkan ialah apa sahaja yang diisytiharkan oleh pengepala yang tidak disahkan; ia tidak dipilih sebagai dasar pengesahan.
Unicode dalam tuntutan — mengapa bait yang dinyahkod mesti dibaca sebagai UTF-8 untuk memaparkan nama dengan betul
Tuntutan mungkin mengandungi aksen, CJK aksara atau emoji. Base64 beroperasi pada bait, jadi menganggap setiap bait yang dinyahkod sebagai aksara bebas merosakkan teks berbilang bait. Laluan yang betul dikodkan simbol kepada bait, kemudian penyahkod UTF-8. ToolAcre membina `TextDecoder` dengan mod maut jadi tidak sah UTF-8 gagal dengan kuat.
Ujian meliputi muatan yang mengandungi `Zoë 世界 🙂` dan menjangkakan rentetan yang tepat selepas penyahkodan. Keputusan itu membuktikan saluran paip bait-ke-teks mengekalkan nilai ujian ini. Ia masih tidak menyatakan sama ada orang yang dinamakan oleh muatan itu wujud, sama ada pengeluar meluluskan tuntutan atau sama ada token itu telah diubah.
Perkara ini tidak meliputi — segmen tandatangan, yang menyahkod kepada bait dan bukannya teks dan memerlukan kunci untuk bermakna apa-apa
Segmen tandatangan berada di luar laluan JSON. ToolAcre mengekalkan bentuk asalnya yang dikodkan dan cuba sahaja mengukur panjang bait yang dinyahkod. Tandatangan Base64 tidak sah menghasilkan amaran tetapi tidak menghalang pemeriksaan pengepala dan muatan; segmen ketiga yang kosong menghasilkan amaran berbeza bahawa tiada bait tandatangan hadir.
Kedua-dua keputusan bukan hasil pengesahan. Pengesahan tandatangan yang bermakna memerlukan bahan utama yang dipercayai, algoritma yang dibenarkan dipilih secara bebas daripada input dikawal penyerang dan semakan aplikasi. Kiraan bait berguna apabila mendiagnosis bentuk, tetapi sifar atau tiga puluh dua bait yang diukur tidak boleh membenarkan permintaan atau menubuhkan pengeluar.
Bawa pulang: gunakan penyahkod yang bercakap base64url — penyahkod ToolAcre JWT mengendalikan abjad dan padding untuk pengepala dan muatan
Gunakan penyahkod yang memahami base64url apabila tugas segera memeriksa JSON. ToolAcre mengendalikan abjad, padding ditinggalkan, ketat UTF-8 dan objek sahaja JSON untuk dua segmen pertama. Ia juga menolak panjang yang mustahil dan membalut kegagalan penghuraian dalam mesej yang mengenal pasti sama ada pengepala atau muatan gagal.
Berhenti di sempadan itu. Penyahkod yang bersih bermakna rentetan mempunyai bait yang boleh dipulihkan dan objek JSON yang sesuai. Ini tidak bermakna tuntutannya boleh dipercayai, disahkan, dibenarkan atau tidak diubah suai. Sahaja pengesah yang dikonfigurasikan secara berasingan boleh menjawab soalan tersebut dan alat pelayar ini dengan sengaja tidak mendedahkan operasi pengesahan.