JWT Dekoder aslida nima qiladi
JSON Web Token (JWT) uzun, tasodifiy belgilardan iborat noaniq satrga o'xshab ko'rinadi, lekin u shifrlangan emas va sirli shifr ham emas. Bu ikki taraf orasida tuzilgan ma'lumotni tashiydigan ixcham, URL uchun xavfsiz konteyner. Yuqoridagi dekoderga tokenni joylashtiring — u satrni bo'laklarga ajratadi va ichidagi haqiqiy JSON'ni ko'rsatadi — metama'lumot, da'volar, token kim uchun ekanligi va u qachon amal qilish muddati tugashi. Barchasi to'g'ridan-to'g'ri brauzeringizda sodir bo'ladi. Token hech qachon yuklanmaydi, qayd qilinmaydi yoki hech qayerga yuborilmaydi, bu esa siz tekshirayotgan narsa jonli sessiya hisob ma'lumoti bo'lganda katta ahamiyat kasb etadi.

Uch qism, ikkita nuqta
Har bir to'g'ri shakllangan JWT nuqtalar bilan birlashtirilgan uchta Base64url kodlangan satrdan iborat: header.payload.signature. Aynan shu bitta nuqta belgisi tahlilchilarga bitta bo'lim qayerda tugab, keyingisi qayerdan boshlanishini bildiradi, va shuning uchun nuqtalar soni noto'g'ri token boshqa hech narsa o'qilishidan oldin rad etiladi.
Sarlavha (header) — bu tokenning o'zini tavsiflovchi kichkina JSON obyekt. U deyarli doim typ (turi, odatda JWT) va alg — imzolash algoritmini, masalan HS256 (SHA-256 bilan HMAC) yoki RS256 (SHA-256 bilan RSA) o'z ichiga oladi. Sarlavha tekshiruvchiga imzo qanday hosil qilinganini aniq ko'rsatadi.
Yuk (payload) — ko'pchilik odamlarni qiziqtiradigan qism. Bu foydalanuvchi va token haqidagi bayonotlarni, ya'ni da'volarni o'z ichiga olgan yana bir JSON obyekti. Spetsifikatsiya da'volarni ro'yxatga olingan (standart, zahiralangan nomlar), ommaviy va xususiy (o'z ilovangiz uchun o'ylab topgan maxsus nomlar) toifalariga ajratadi. Yukni dekodlash kim tizimga kirganini, qanday rolga ega ekanini va sessiyasi qachon tugashini ochib beradi.
Imzo (signature) — kriptografik muhr. U sarlavhada ko'rsatilgan algoritm va maxfiy yoki xususiy kalit yordamida kodlangan sarlavha va yukdan hisoblanadi. U boshqa ikkala bo'limni ham qamrab olgani uchun, sarlavha yoki yukdagi har qanday o'zgarish — hatto bitta belgi ham — uni yaroqsiz qiladi.
Eng ko'p uchraydigan da'volar
Ro'yxatga olingan da'volar turli tizimlar o'zaro ishlashi uchun RFC 7519 tomonidan belgilangan qisqa, uch harfli nomlar. Bir nechtasi deyarli hamma joyda uchraydi:
iss— issuer (chiqaruvchi): tokenni kim yaratgan (autentifikatsiya serveringiz yoki identifikatsiya provayderi).sub— subject (subyekt): token kim haqida ekanligi, odatda barqaror foydalanuvchi identifikatori.aud— audience (auditoriya): token mo'ljallangan qabul qiluvchi. API o'zi bo'lmagan auditoriyaga ega tokenlarni rad etishi kerak.exp— expiration time (amal qilish muddati): undan keyin token qabul qilinmasligi kerak bo'lgan Unix vaqt belgisi.iat— issued at (chiqarilgan vaqti): token yaratilgan Unix vaqt belgisi.
Shuningdek, nbf (undan oldin emas) va jti (noyob token identifikatori) ham uchrashi mumkin. Vaqt belgilari UTC bo'yicha 1970 yildan beri o'tgan soniyalarda beriladi, shuning uchun ularni inson o'qiy oladigan sanalarga aylantiradigan dekoder tokenning allaqachon muddati tugaganini tekshirishdagi aqliy hisob-kitobdan qutqaradi.
Dekodlash — tekshirish emas — bu odamlarni chalg'itadigan qism
Bu farq JWT haqida tushunish kerak bo'lgan eng muhim narsa. Dekodlash — tarkibni o'qish degani: bu hech qanday kalitni talab qilmaydi va tokenni ushlagan har kim buni qila oladi, chunki Base64url — bu kodlash, shifrlash emas. Tekshirish (verifying) esa tokenning haqiqiy va o'zgartirilmaganligini isbotlash degani — imzoni to'g'ri maxfiy yoki ommaviy kalit bilan qayta hisoblab, uning mos kelishini tasdiqlash.
Ushbu vosita faqat dekodlaydi. U tokenning nima deyayotganini ko'rsatadi, tokenning ishonchli ekanligini emas. Token soxta, muddati tugagan yoki qayta ishlatilgan bo'lishi mumkin, va shunga qaramay u ajoyib toza ko'rinadigan JSON'ga dekodlanadi. Hech qachon faqat dekodlangan da'volar asosida avtorizatsiya qarorini qabul qilmang. Ishlab chiqarishda siz imzoni serverda tekshirasiz, expni tekshirasiz va iss hamda audning kutganingizga mos kelishini tasdiqlaysiz — tekshirilgan kutubxona yordamida, hech qachon qo'lda yozilgan satr taqqoslash orqali emas.

Yuk — bu seyf emas
Yuk faqat Base64url bilan kodlangani uchun, uni tokenni ushlab qolgan har kim o'qiy oladi. Undagi hamma narsani ommaviy deb hisoblang. JWT da'volarida parollar, to'liq bank kartasi raqamlari, maxfiy kalitlar yoki har qanday nozik shaxsiy ma'lumotni joylashtirmang — agar siz buni bir bosishda shu yerda dekodlay olsangiz, uning nusxasini olgan har kim ham dekodlay oladi. Imzo o'zgartirishdan himoyalaydi, hech qachon o'qishdan emas. Agar sizga haqiqatan ham yuk tarkibini yashirish kerak bo'lsa, bu butunlay boshqa spetsifikatsiya bo'lgan JWE (shifrlangan tokenlar)ning vazifasi.
Maxfiylik va bog'liq vositalar
Tokenni tekshirish nozik amal, shuning uchun ushbu dekoder to'liq mijoz tomonida ishlaydi — tahlil sizning yorlig'ingizdagi oddiy JavaScript bo'lib, hech narsa qurilmangizdan chiqib ketmaydi. Sessiya tokenini serverga bog'liq vositaga joylashtirish jonli hisob ma'lumotini uchinchi tomonga topshirish degani, va aynan shundan qochish kerak. Uning tagida yotgan kodlash uchun Base64 vositamizga qarang, va qurilmada ishlaydigan boshqa vositalar uchun dasturchi vositalarimizni ko'rib chiqing.
Tez-tez so'raladigan savollar
JWT shifrlanganmi?
Yo'q. Standart JWT Base64url bilan kodlangan, shifrlangan emas. Tokenga ega har kim sarlavha va yukni o'qiy oladi. Agar tarkibni yashirish kerak bo'lsa, JWE'dan foydalaning.
Ushbu vosita imzoni tekshiradimi?
Yo'q. U faqat dekodlaydi va sarlavha hamda yukni ko'rsatadi. Imzoni tekshirish chiqaruvchining maxfiy yoki ommaviy kalitini talab qiladi va bu serveringizda amalga oshirilishi kerak.
Tokenimni bu yerga joylashtirish xavfsizmi?
Ha. Dekodlash to'liq brauzeringizda lokal JavaScript yordamida amalga oshiriladi. Token hech qachon yuklanmaydi, saqlanmaydi yoki hech qanday serverga yuborilmaydi.
iss, sub, aud, exp va iat nimani anglatadi?
Bular ro'yxatga olingan da'volar: chiqaruvchi, subyekt, auditoriya, amal qilish muddati va chiqarilgan vaqti. Vaqtga bog'liq uchtasi soniyalarda Unix vaqt belgilaridan foydalanadi.
Dekodlashdan keyin ko'rsatilgan da'volarga ishonsam bo'ladimi?
O'z-o'zidan emas. Dekodlangan da'volar soxta yoki muddati tugagan tokendan kelishi mumkin. Ularga ishonishdan oldin har doim imzoni tekshiring va serverda amal qilish muddatini nazorat qiling.
Nega tokenimda nuqtalar bilan ajratilgan uchta qism bor?
Bular sarlavha, yuk va imzo, har biri Base64url bilan kodlangan va nuqtalar bilan birlashtirilgan. Nuqtalar tahlilchilarga har bir bo'lim qayerdan boshlanib, qayerda tugashini bildiradi.
