Alat pembangun · JWT penyahkod
JWT exp, iat dan nbf: NumericDate ialah Saat, Bukan Milisaat
· Bagaimana ia berfungsi
jwt cap masa penyahpepijatan
JavaScript memberi anda milisaat dan JWT mahukan beberapa saat, jadi cap masa menjadi salah dengan faktor seribu. Siaran ini menerangkan NumericDate dan cara membaca tuntutan tiga kali dengan betul.
Token yang tidak pernah luput atau luput sebelum tiba — dua gejala kesilapan unit
Kesilapan faktor-satu-ribu menghasilkan gejala dramatik. Membekalkan JavaScript milisaat di mana pengeluar token menjangkakan detik epoch boleh menolak tamat tempoh beribu-ribu tahun lagi. Membahagikan nilai saat sekali lagi boleh meletakkannya berhampiran 1970, menjadikan token yang baru dikeluarkan kelihatan tamat tempoh sebelum permintaan pertamanya yang sah.
Penyahkod membantu mendedahkan skala dengan menunjukkan tuntutan berangka di sebelah bacaan ISO. Paparan itu adalah diagnostik sahaja. Penyerang boleh menulis sebarang nombor `exp`, `iat` atau `nbf` ke dalam muatan yang tidak ditandatangani atau dipalsukan, jadi masa jam yang ditukar mempunyai kuasa sahaja selepas tandatangan dan pengesahan dasar di tempat lain.
NumericDate dalam RFC 7519 — saat sejak zaman Unix, sebagai nombor JSON, dengan pecahan dibenarkan tetapi jarang digunakan
JWT tuntutan masa menggunakan perwakilan NumericDate: nombor JSON mengira saat dari zaman Unix. Nombor pecahan boleh mewakili kedudukan subsaat kerana pelaksanaan mendarabkan nilai dengan 1,000 sebelum membina Tarikh. Ia tidak membundarkan nombor terhingga yang sah kepada integer terlebih dahulu.
ToolAcre mengiktiraf `exp`, `nbf`, `iat`, `auth_time` dan `updated_at` sebagai medan berbentuk masa untuk paparan. Sahaja tiga yang pertama adalah antara perihalan tuntutan berdaftarnya. Keputusan Tarikh bukan angka, tidak terhingga atau tidak sah ditinggalkan dan bukannya dijadikan sebagai masa yang bermakna, menghalang rentetan seperti "tidak lama lagi" daripada menyamar sebagai cap waktu.
Date.now() ialah milisaat — tabiat JavaScript yang menghasilkan tamat tempoh masa hadapan
`Date.now()` mengembalikan milisaat, manakala nilai NumericDate dinyatakan dalam saat. Oleh itu, pengeluar yang memperoleh tuntutan daripada jam pelayar memerlukan penukaran skala yang jelas, biasanya membahagikan dengan 1,000 sebelum menggunakan dasar pembundarannya sendiri. Laluan baca ToolAcre melakukan pendaraban songsang semata-mata untuk paparan.
Pastikan penukaran unit kelihatan dalam semakan kod. Nilai tiga belas digit dalam `exp` ialah tanda amaran yang berguna, tetapi pengiraan digit bukanlah pengesahan dan tidak boleh menggantikan kontrak pengeluar. Penyahkod akan cuba memberikan sebarang tuntutan angka terhingga yang JavaScript Tarikh boleh mewakili; ia tidak secara senyap mentafsir semula milisaat sebagai saat.
exp, nbf dan iat — tamat tempoh, bukan sebelum dan dikeluarkan pada, dan cara pengesah menggunakan setiap
`exp` menamakan masa selepas itu pengesah seharusnya tidak lagi menerima token di bawah dasarnya. `nbf` menamakan sempadan yang sebelum ini ia tidak sepatutnya diterima. `iat` merekodkan masa pengeluaran. ToolAcre melabelkan makna ini dan membandingkan sahaja `exp` dan `nbf` dengan jam rujukan yang dibekalkan.
Keadaan yang dikembalikan ialah `expired` apabila tamat tempoh dinyahkod lebih awal daripada sekarang, `future` apabila tidak-sebelumnya terletak lewat daripada sekarang dan `past` untuk tuntutan masa yang dipaparkan yang lain. Label ini ialah pemerhatian tentang aritmetik muatan. Mereka bukan keputusan pengesahan dan tidak menilai pengeluar, penonton, kunci atau tandatangan.
Perbezaan jam dan kelonggaran adalah milik pengesah; penyahkod ini tidak mentakrifkan kedua-duanya
Garis besar bertanya berapa banyak pencongan jam yang munasabah, tetapi konfigurasi atau pelaksanaan penyahkod JWT tidak menentukan kelonggaran. Nombor itu adalah milik pengesah dan keperluan penggunaannya. Mencipta lalai di sini akan menjadikan artikel pemeriksaan menjadi dasar keselamatan tidak berdokumen, jadi bahagian ini dengan sengaja tidak memberikannya.
Jika perkhidmatan menolak token berhampiran sempadan, bandingkan jam perkhidmatan, jam pengeluar dan dasar pengesah yang dikonfigurasikan menggunakan log yang dipercayai. ToolAcre menyelesaikan tuntutan terhadap Tarikh semasa pelayar tanpa tetingkap toleransi. Oleh itu, keputusannya mungkin berbeza daripada pelayan yang sengaja menggunakan kelonggaran, walaupun kedua-duanya menghuraikan nombor yang sama.
Contoh yang berkesan — menukar nilai exp sampel kepada masa yang boleh dibaca manusia dan menyemaknya terhadap iat
Katakan muatan sintetik mengandungi `iat: 1717243200` dan `exp: 1717246800`. Mendarab dengan 1,000 memberikan ISO segera `2024-06-01T12:00:00.000Z` dan `2024-06-01T13:00:00.000Z`. Menolak nilai saat mentah menghasilkan selang satu jam tanpa mencampurkan milisaat pelayar ke dalam pengiraan.
Aritmetik itu menerangkan apa yang dikatakan oleh muatan. Ia tidak menunjukkan bahawa pengeluar memilih nilai tersebut atau satu jam sesuai untuk sebarang aplikasi. ToolAcre cantik-mencetak nombor, menjana UTC baris dan boleh memanggil yang lama tamat tempoh berbanding hari ini; pengesah mesti mengesahkan secara bebas dan menguatkuasakan peraturan penerimaannya sendiri.
Perkara ini tidak meliputi — sama ada pelayan tertentu akan menerima token, yang bergantung pada jam dan kelonggarannya; penyahkod menunjukkan nilai, bukan keputusan
Penyahkod tidak boleh meramalkan sama ada pelayan tertentu akan menerima token. Pelayan mungkin menggunakan jam yang berbeza, toleransi yang dikonfigurasikan, skema tuntutan yang lebih ketat atau semakan penerbit dan khalayak tambahan. Kegagalan tandatangan sahaja boleh menolak token yang NumericDates yang dipaparkan kelihatan sangat biasa.
Sebaliknya, tamat tempoh masa hadapan tidak menjadikan token yang tidak disahkan sah. Anggap jadual masa sebagai cara untuk mengesan kemungkinan ralat unit dan mengumpul bukti untuk penyahpepijatan. Keputusan sebenar terdapat dalam log pelayan atau ujian pengesahan terkawal dengan kunci dan dasar yang dijangkakan, tidak sekali-kali dalam panel nyahkod.
Bawa pulang: baca tuntutan, buat aritmetik — penyahkod ToolAcre JWT menunjukkan exp, iat dan nbf supaya anda boleh menyemak unit itu sendiri
Baca tuntutan dan lakukan aritmetik skala dengan sengaja: NumericDate saat menjadi JavaScript milisaat sahaja di sempadan Tarikh. ToolAcre menjadikan pendaraban itu jelas dalam sumber dan memaparkan nilai ISO yang terhasil, sambil mengabaikan jenis masa yang cacat dan bukannya meneka maksud pengarangnya.
Pastikan perbezaan keselamatan sama eksplisit. Paparan `exp` bukan penguatkuasaan tamat tempoh, paparan `nbf` bukan kawalan kemasukan dan `iat` bukan bukti pengeluaran. Selepas memeriksa token buang, gunakan pengesah yang dipercayai untuk mengesahkannya dan gunakan dasar jam dan tuntutan sebenar perkhidmatan tersebut.