Alat pengembang · dekoder JWT
JWT exp, iat dan nbf: Tanggal Numerik Adalah Detik, Bukan Milidetik
· Cara kerjanya
jwt stempel waktu melakukan debug
JavaScript memberi Anda milidetik dan JWT menginginkan detik, sehingga stempel waktunya salah hingga ribuan kali lipat. Postingan ini menjelaskan NumericDate dan cara membaca klaim tiga waktu dengan benar.
Token yang tidak pernah kedaluwarsa atau kedaluwarsa sebelum tiba — dua gejala kesalahan unit
Kesalahan sebesar satu faktor menghasilkan gejala yang dramatis. Memasok JavaScript milidetik yang diharapkan oleh produsen token dalam beberapa detik dapat mempercepat masa berlakunya ribuan tahun lagi. Membagi lagi nilai detik dapat menempatkannya di dekat 1970, membuat token yang baru diterbitkan tampak kedaluwarsa sebelum permintaan pertama yang sah.
Decoder membantu mengekspos skala dengan menampilkan klaim numerik di samping pembacaan ISO. Tampilan itu hanya bersifat diagnostik. Penyerang dapat menulis nomor `exp`, `iat` atau `nbf` apa pun ke dalam payload yang tidak ditandatangani atau dipalsukan, sehingga waktu jam yang dikonversi hanya memiliki wewenang setelah penandatanganan dan validasi kebijakan di tempat lain.
NumericDate dalam RFC 7519 — detik sejak zaman Unix, sebagai angka JSON, dengan pecahan diperbolehkan tetapi jarang digunakan
JWT klaim waktu menggunakan representasi NumericDate: angka JSON yang menghitung detik dari zaman Unix. Angka pecahan dapat mewakili posisi subdetik karena penerapannya mengalikan nilainya dengan 1,000 sebelum membuat Tanggal. Itu tidak membulatkan bilangan terbatas yang valid menjadi bilangan bulat terlebih dahulu.
ToolAcre mengenali `exp`, `nbf`, `iat`, `auth_time` dan `updated_at` sebagai bidang berbentuk waktu untuk ditampilkan. Hanya tiga yang pertama yang termasuk dalam deskripsi klaim terdaftarnya. Hasil Tanggal yang non-numerik, tidak terbatas, atau tidak valid dihilangkan dan bukannya ditampilkan sebagai waktu yang bermakna, sehingga mencegah string seperti “segera” menyamar sebagai stempel waktu.
Date.now() adalah milidetik — kebiasaan JavaScript yang menghasilkan masa kadaluwarsa yang jauh di masa depan
`Date.now()` mengembalikan milidetik, sedangkan nilai NumericDate dinyatakan dalam detik. Oleh karena itu, produsen yang memperoleh klaim dari jam browser memerlukan konversi skala yang eksplisit, biasanya dibagi dengan 1,000 sebelum menerapkan kebijakan pembulatannya sendiri. Jalur baca ToolAcre melakukan perkalian terbalik hanya untuk tampilan.
Jaga agar konversi unit tetap terlihat dalam tinjauan kode. Nilai tiga belas digit dalam `exp` merupakan tanda peringatan yang berguna, namun penghitungan digit bukanlah verifikasi dan tidak dapat menggantikan kontrak produsen. Dekoder akan mencoba memberikan klaim numerik terbatas apa pun yang dapat diwakili oleh JavaScript Tanggal; ia tidak secara diam-diam menafsirkan ulang milidetik sebagai detik.
exp, nbf dan iat — kadaluwarsa, bukan sebelum dan diterbitkan pada, dan bagaimana verifikator menerapkan masing-masing
`exp` menyebutkan waktu setelah pemverifikasi tidak boleh lagi menerima token berdasarkan kebijakannya. `nbf` menyebutkan batas yang sebelumnya tidak boleh diterima. `iat` mencatat waktu penerbitan. ToolAcre memberi label pada arti ini dan hanya membandingkan `exp` dan `nbf` dengan jam referensi yang disediakan.
Status yang dikembalikan adalah `expired` ketika masa berlaku yang didekodekan lebih awal dari sekarang, `future` ketika tidak sebelum terletak lebih lambat dari sekarang, dan `past` untuk klaim waktu lain yang ditampilkan. Label ini adalah pengamatan tentang aritmatika muatan. Ini bukan keputusan autentikasi dan tidak mengevaluasi penerbit, audiens, kunci, atau tanda tangan.
Perbedaan jam dan kelonggaran menjadi milik verifikator; decoder ini tidak mendefinisikan keduanya
Garis besarnya menanyakan seberapa besar kemiringan jam yang masuk akal, tetapi konfigurasi dekoder JWT maupun implementasinya tidak menentukan kelonggaran. Nomor tersebut milik verifikator dan persyaratan penerapannya. Menciptakan default di sini akan mengubah artikel inspeksi menjadi kebijakan keamanan yang tidak terdokumentasi, jadi bagian ini sengaja tidak menyediakannya.
Jika layanan menolak token di dekat batas, bandingkan jam layanan, jam penerbit, dan kebijakan pemverifikasi yang dikonfigurasi menggunakan log tepercaya. ToolAcre menyelesaikan klaim terhadap Tanggal browser saat ini tanpa batas waktu toleransi. Oleh karena itu, hasilnya mungkin berbeda dari server yang sengaja menerapkan kelonggaran, meskipun keduanya mengurai nomor yang sama.
Contoh praktis - mengubah nilai sampel exp menjadi waktu yang dapat dibaca manusia dan memeriksanya terhadap iat
Misalkan muatan sintetis berisi `iat: 1717243200` dan `exp: 1717246800`. Mengalikannya dengan 1,000 menghasilkan ISO instans `2024-06-01T12:00:00.000Z` dan `2024-06-01T13:00:00.000Z`. Mengurangi nilai detik mentah akan menghasilkan interval satu jam tanpa memasukkan milidetik browser ke dalam penghitungan.
Aritmatika itu menjelaskan apa yang dikatakan muatannya. Ini tidak menunjukkan bahwa penerbit memilih nilai-nilai tersebut atau bahwa satu jam cocok untuk penerapan apa pun. ToolAcre mencetak angka-angka dengan cantik, menghasilkan UTC baris dan dapat menyebut masa berlakunya relatif lama terhadap hari ini; seorang verifikator harus secara independen mengautentikasi dan menegakkan aturan penerimaannya sendiri.
Apa yang tidak tercakup dalam hal ini — apakah server tertentu akan menerima token, yang bergantung pada jam dan waktu luangnya; decoder menunjukkan nilainya, bukan keputusannya
Dekoder tidak dapat memprediksi apakah server tertentu akan menerima token tersebut. Server mungkin menggunakan jam yang berbeda, toleransi yang dikonfigurasi, skema klaim yang lebih ketat, atau pemeriksaan penerbit dan audiens tambahan. Kegagalan tanda tangan saja dapat menolak token yang NumericDates yang ditampilkan terlihat biasa saja.
Sebaliknya, masa berlaku yang akan datang tidak membuat token yang belum diverifikasi menjadi valid. Perlakukan tabel waktu sebagai cara untuk menemukan kemungkinan kesalahan unit dan mengumpulkan bukti untuk proses debug. Keputusan sebenarnya termasuk dalam log server atau pengujian verifikasi terkontrol dengan kunci dan kebijakan yang diharapkan, tidak pernah ada di panel dekode.
Kesimpulan: baca klaimnya, lakukan aritmatika — dekoder ToolAcre JWT menampilkan exp, iat, dan nbf sehingga Anda dapat memeriksa sendiri unitnya
Baca klaim dan lakukan aritmatika skala dengan sengaja: Detik NumericDate menjadi JavaScript milidetik hanya pada batas Tanggal. ToolAcre menjadikan perkalian tersebut eksplisit dalam sumber dan menampilkan nilai ISO yang dihasilkan, sambil mengabaikan jenis waktu yang salah formatnya alih-alih menebak apa maksud penulisnya.
Jaga agar perbedaan keamanan tetap jelas. Tampilan `exp` bukan merupakan penegakan kadaluwarsa, tampilan `nbf` bukan kontrol penerimaan, dan `iat` bukan bukti penerbitan. Setelah memeriksa token yang dibuang, gunakan verifikator tepercaya untuk mengautentikasinya dan menerapkan kebijakan jam dan klaim layanan yang sebenarnya.