JSON Web Token nima?
JSON Web Token (JWT) — bu kichik da'volar yuki uchun ixcham, URL uchun xavfsiz konvertdir. U holatsiz veb-sessiyalar, OAuth/OIDC ID tokenlari, mashinadan-mashinaga API autentifikatsiyasi va imzolangan sehrli havolalar uchun standart hisob ma'lumotlari formatidir. JWT har doim nuqtalar bilan birlashtirilgan uchta base64url segmentidan iborat: header.payload.signature. Sarlavha va yuk JSON; imzo esa birinchi ikki segment ustidagi ikkilik MAC yoki raqamli imzo.
JWT-lar qanday ishlaydi?
Ushbu vosita tokenni dekodlaganda har bir JWT kutubxonasi amal qiladigan xuddi shu uch bosqichli yo'lni bosib o'tadi:
- Tokenni nuqtalar bo'yicha aniq uchta bo'sh bo'lmagan segmentga ajrating. Boshqa har qanday shakl noto'g'ri formatlangan hisoblanadi.
- 0 va 1 segmentlarni Base64url-dekodlang, so'ng har birini
JSON.parseqiling. Sarlavha algoritm (alg) va token turini (typ) o'z ichiga oladi. Yuk esa da'volarni (sub,exp,iat, maxsus kalitlar) saqlaydi. - Agar maxfiy taqdim etilgan bo'lsa, sarlavhadagi algoritm yordamida
<segment0>.<segment1>ustida MAC ni qayta hisoblang. Baytlarni uchinchi segment bilan solishtiring. - Tekshirish natijasini, jumladan
expda'vosidan hisoblangan odam o'qiy oladigan amal qilish muddati ko'rsatkichi bilan birga, dekodlangan da'volar yonida ko'rsating.
Nima uchun JWT-larni brauzerda dekodlash kerak?
Haqiqiy, ishlatilayotgan JWT tokenini masofaviy debugerga joylashtirish hisob ma'lumotlarini o'sha xizmatning loglariga, kuzatuv stekiga va xizmat ma'lumot uzatadigan har qanday hamkorga sizdiradi. Uchinchi tomon sayti tokenlarni loglamasligini da'vo qilganda ham, buni tekshirishning iloji yo'q. Bu vosita siz hech qachon bunday murosaga borishingiz shart bo'lmasligi uchun yaratilgan:
- Nol tarmoq: ish vaqtida
fetch,XMLHttpRequestyokisendBeaconchaqiriqlari yo'q. Dekodlash va tekshirish vaqtida DevTools ni oching — Tarmoq paneli jim qoladi. - Mahalliy Web Crypto: HMAC tekshirish
crypto.subtle.importKeyvacrypto.subtle.signdan foydalanadi, bular sizning ish vaqtingiz chaqiradigan o'sha primitivlardir. - Statik joylashtirish: har bir sahifa bitta statik HTML fayldir va kompromisga uchraydigan server uchi yo'q. Tokenni sizdiradigan server yo'q, demak sizdiradigan token ham yo'q.
Bu vosita nimani tekshiradi va nimani tekshirmaydi?
Bu vositaning 1-versiyasi faqat HMAC-SHA oilasi imzolarini tekshiradi. Aniqrog'i:
- Qo'llab-quvvatlanadi: HS256, HS384, HS512. Umumiy maxfiyni taqdim eting va vosita MAC ni qayta hisoblab solishtiradi.
- Hali qo'llab-quvvatlanmaydi: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA va PS256/384/512 (RSA-PSS). Bular PEM yoki JWK shaklidagi ochiq kalitni talab qiladi va keyingi nashrga atayin keyinga qoldirilgan.
- Rad etiladi:
alg: "none". Vosita tokenni dekodlaydi, lekin uni xavfsiz emas deb aniq belgilaydi — imzo tekshiruvi sodir bo'lmaydi va bunday tokenni qabul qiladigan har qanday ishlab chiqarish tizimida jiddiy zaiflik mavjud.
JWT dekodlash misoli qanday ko‘rinadi?
Yuqoridagi kiritish maydoniga kanonik RFC 7519 misol tokenini joylashtiring:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Sarlavha {"alg":"HS256","typ":"JWT"} ga, yuk esa {"sub":"1234567890","name":"John Doe","iat":1516239022} ga dekodlanadi. Tekshirish paneliga your-256-bit-secret ni kiriting va imzo tekshiruvi yaroqli deb qaytaradi. Maxfiyning bitta belgisini o'zgartiring va u yaroqsiz deb qaytaradi. Bularning hech biri brauzeringizdan tashqariga chiqmaydi.
Bu biz ishlab chiqarishdagi tokenni nosozlikdan tuzatishimiz kerak bo'lganda mavjudligini orzu qilgan JWT dekoderi: maxfiylikni hurmat qiluvchi, tezkor va ish vaqti ishlatadigan o'sha primitivlar asosida qurilgan.