Dekoder JWT Gratis

Dekode dan inspeksi JSON Web Tokens · header, payload, klaim, dan kadaluarsa.

Header


      

Payload


      

Tanda Tangan


      

Tentang JWTs

JSON Web Tokens (JWTs) adalah cara ringkas untuk merepresentasikan klaim antara dua pihak. Mereka terdiri dari tiga bagian: header (algoritma dan tipe), payload (klaim seperti penerbit, kadaluarsa, subjek), dan tanda tangan. Alat ini mendekode header dan payload tetapi tidak memverifikasi tanda tangan · untuk itu, Anda memerlukan rahasia penandatanganan atau kunci publik. Semua pendekodean terjadi di browser Anda; token Anda tidak pernah dikirim ke mana pun.

Sejarah singkat JSON Web Token

JSON Web Token (JWT) distandardisasi sebagai RFC 7519 pada Mei 2015 oleh Michael B. Jones (Microsoft), John Bradley (Ping Identity), dan Nat Sakimura (NRI) di bawah Kelompok Kerja JOSE IETF. Itu adalah puncak dari setengah dekade pekerjaan: draf internet JWT pertama muncul pada Desember 2010, tumbuh dari format aserisi berbasis XML yang berat dari SAML 2.0 (2005) dan kebutuhan yang dirasakan akan sesuatu yang lebih ringan yang dapat dianalisis browser secara native. Terobosan adalah memilih JSON daripada XML dan base64url daripada PEM: JWT dapat masuk ke dalam string kueri URL atau header Authorization: Bearer. Seluruh keluarga JOSE dikirim sebagai set terkoordinasi: RFC 7515 (JWS) untuk penandatanganan, RFC 7516 (JWE) untuk enkripsi, RFC 7517 (JWK) untuk format kunci, RFC 7518 (JWA) untuk pengidentifikasi algoritma, dan RFC 7519 (JWT) untuk lapisan klaim, semuanya pada hari yang sama di Mei 2015. Adopsi instan. OAuth 2.0 (RFC 6749, 2012) telah menstandardisasi token akses tetapi membiarkan formatnya tidak transparan; industri memilih JWT. OpenID Connect (Desember 2014, OpenID Foundation) membuat JWT wajib untuk token ID. Pada 2017, setiap penyedia identitas besar (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) mengeluarkan JWT sebagai format sesi native mereka. JWT.io, situs web dekoder yang diluncurkan Auth0 pada 2014, menjadi alat de facto debugging JWT dan membantu menyemen mindshare pengembang terhadap format. Dua insiden keamanan membentuk model ancaman modern: pengungkapan Tim McLean pada 2015 tentang bypass alg: none dan serangan kebingungan algoritma HS/RS, dan CVE-2022-21449 (April 2022), bug «Psychic Signatures» Neil Madden di verifier ECDSA Java 15-18. Keduanya menyebabkan pengerasan default pustaka: sebagian besar pustaka modern sekarang menolak alg: none langsung dan menyematkan algoritma yang diharapkan daripada membacanya dari header token.

Anatomi sebuah JWT

Di mana JWT digunakan dalam praktik

Standar dan tonggak sejarah keamanan

Pertanyaan yang lebih sering ditanyakan

Mengapa alat ini tidak memverifikasi tanda tangan?

Verifikasi memerlukan rahasia (HMAC) atau kunci publik (RSA / ECDSA / EdDSA). Menempelkan rahasia HMAC produksi ke situs web apa pun adalah kebocoran kredensial dengan sendirinya, bahkan pada alat yang bersumpah tidak mengirimkan apa pun. Verifikasi termasuk dalam server yang Anda kontrol. Pekerjaan dekoder adalah membuat konten dapat dibaca sehingga Anda dapat melihat apa yang seharusnya diperiksa verifier Anda.

Apakah aman untuk menempelkan token produksi nyata di sini?

Decoding terjadi sepenuhnya di browser Anda. Token tidak dikirim melalui jaringan, ditulis ke log apa pun, atau disimpan di mana pun. Yang mengatakan, JWT sering adalah kredensial: siapa pun yang memegang token akses yang tidak kedaluwarsa dapat bertindak sebagai pengguna. Konvensi komunitas adalah «perlakukan JWT produksi seperti cookie sesi»: lebih suka token tes ketika Anda bisa, dan putar token nyata apa pun yang Anda bagikan di mana pun di luar sesi browser yang mencetaknya.

Di mana saya harus menyimpan JWT di browser?

Dua pola umum masing-masing memiliki trade-off. localStorage nyaman tetapi dapat dibaca oleh serangan XSS yang sukses di halaman. Cookie dengan HttpOnly tidak terlihat oleh JavaScript sehingga XSS tidak dapat membacanya, tetapi mereka membutuhkan SameSite=Strict atau SameSite=Lax untuk menghindari CSRF. Praktik terbaik saat ini: token akses berdurasi singkat dalam variabel JavaScript (memori saja) ditambah token penyegaran berdurasi panjang dalam cookie HttpOnly + Secure + SameSite=Strict yang berskop ke endpoint penyegaran, dirotasi pada setiap penggunaan.

Apa yang dilakukan bidang kid di header?

Itu mengidentifikasi kunci mana yang menandatangani token. Penyedia identitas modern menerbitkan kunci publik mereka di endpoint /.well-known/jwks.json sebagai JWK Set (RFC 7517); verifier mencari kunci yang kid-nya cocok dengan header token. Inilah yang membuat rotasi kunci tanpa downtime mungkin: baik kunci lama maupun baru dapat berada di JWKS selama masa tenggang.

Bisakah saya mencabut JWT setelah diterbitkan?

Tidak secara native. JWT yang ditandatangani valid sampai klaim exp-nya; ketanpa-statusan itu adalah properti utama format. Solusi: jaga token akses tetap singkat (5-15 menit) dipasangkan dengan token penyegaran yang dapat dicabut; pertahankan daftar penolakan sisi server dari nilai jti yang dicabut; rotasi kunci penandatanganan (yang membatalkan setiap token yang belum diselesaikan yang ditandatangani dengannya). Setiap opsi memperkenalkan kembali beberapa statefulness; itulah trade-nya.

Apakah mendekode token sama dengan mendekripsikannya?

Tidak. Decoding membalikkan base64url kembali ke JSON: siapa pun bisa melakukannya, dan itulah intinya. Dekripsi memerlukan kunci dan hanya berlaku untuk JSON Web Encryption (JWE, RFC 7516), yang merupakan varian terenkripsi dari keluarga JOSE. Kebanyakan token yang Anda lihat di alam liar adalah JWS (ditandatangani tetapi tidak dienkripsi), jadi decoding cukup untuk membacanya.

Alat Terkait