JWT — JSON Web Token, ya’ni JSON formatidagi ma’lumotlarni xavfsiz token ko‘rinishida uzatish uchun ishlatiladigan ochiq standart. JWT authentication, authorization, API xavfsizligi va service’lar orasidagi identity almashishda keng qo‘llanadi.
JWT odatda foydalanuvchi login qilgandan keyin yaratiladi va keyingi so‘rovlarda foydalanuvchini aniqlash uchun ishlatiladi.
Vazifasi
JWT foydalanuvchi yoki service haqida ma’lumotni token ko‘rinishida uzatish uchun ishlatiladi.
JWT quyidagi vazifalarda qo‘llanadi:
- foydalanuvchi authentication holatini tasdiqlash;
- API so‘rovlarini himoyalash;
- foydalanuvchi ID’sini token ichida uzatish;
- role va permission ma’lumotlarini saqlash;
- stateless authentication tashkil qilish;
- OAuth va OpenID Connect jarayonlarida ishlash;
- microservice’lar orasida user context uzatish;
- frontend va backend aloqasida identity saqlash;
- access token sifatida ishlash.
Masalan, foydalanuvchi login qilganda backend JWT yaratadi va frontend keyingi API so‘rovlarida shu tokenni yuboradi.
JWT qanday ishlaydi?
JWT server tomonidan yaratiladi va imzolanadi. Client tokenni saqlaydi va keyingi so‘rovlarda serverga yuboradi. Server token imzosini tekshiradi va ichidagi ma’lumotlar asosida foydalanuvchini aniqlaydi.
Oddiy jarayon:
- foydalanuvchi login qiladi;
- backend login ma’lumotlarini tekshiradi;
- JWT yaratadi;
- JWT clientga qaytariladi;
- client tokenni saqlaydi;
- API so‘rovlarida tokenni yuboradi;
- backend token imzosini tekshiradi;
- token yaroqli bo‘lsa, so‘rov bajariladi.
JWT serverda session saqlamasdan ham foydalanuvchini aniqlash imkonini beradi.
JWT tuzilishi
JWT uchta asosiy qismdan iborat:
Bu qismlar nuqta bilan ajratiladi.
Ko‘rinishi:
header.payload.signature
Har bir qism Base64URL formatida kodlangan bo‘ladi.
Header
Header — JWT tokenning birinchi qismi. Unda token turi va ishlatilgan imzolash algoritmi haqida ma’lumot bo‘ladi.
Header ichida odatda quyidagilar bo‘ladi:
typ— token turi;alg— imzolash algoritmi.
Misol:
{"alg":"HS256","typ":"JWT"}
Bu yerda HS256 token HMAC SHA-256 algoritmi bilan imzolanganini bildiradi.
Payload
Payload — JWT ichidagi asosiy ma’lumotlar qismi. Payload claimlardan iborat bo‘ladi.
Payload ichida quyidagilar bo‘lishi mumkin:
- user ID;
- email;
- role;
- permissionlar;
- token yaratilgan vaqt;
- token tugash vaqti;
- issuer;
- audience;
- custom claimlar.
Misol:
{"sub":"123","role":"admin","exp":1790000000}
Payload shifrlanmagan bo‘lishi mumkin, shuning uchun maxfiy ma’lumotlarni ochiq JWT payload ichida saqlash xavfli hisoblanadi.
Signature
Signature — JWT token o‘zgartirilmaganini tekshirish uchun ishlatiladigan imzo qismi. Signature header va payload asosida maxfiy kalit yoki private key yordamida yaratiladi.
Signature quyidagilarni tekshiradi:
- token server tomonidan yaratilganmi;
- payload o‘zgartirilmaganmi;
- header o‘zgartirilmaganmi;
- token ishonchli manbadan kelganmi.
Agar JWT payload o‘zgartirilsa, signature mos kelmaydi va token yaroqsiz bo‘ladi.
Claim
Claim — JWT payload ichidagi ma’lumot maydoni. Claim token egasi, muddati, manbasi yoki ruxsatlari haqida ma’lumot beradi.
Claim turlari:
- registered claim;
- public claim;
- private claim;
- custom claim.
Claimlar authentication va authorization jarayonida ishlatiladi.
Registered claims
Registered claims — JWT standartida oldindan belgilangan claimlar.
Keng ishlatiladigan registered claimlar:
iss— tokenni bergan server;sub— token egasi yoki user ID;aud— token mo‘ljallangan audience;exp— token tugash vaqti;nbf— token qachondan boshlab amal qilishi;iat— token yaratilgan vaqt;jti— tokenning noyob ID’si.
Bu claimlar JWT tekshirish va boshqarish jarayonida ishlatiladi.
Custom claims
Custom claims — ilova ehtiyojiga qarab token ichiga qo‘shiladigan maxsus ma’lumotlar.
Custom claim misollari:
role;permissions;organization_id;tenant_id;username;plan;is_staff.
Masalan, SaaS platformada JWT ichida tenant_id saqlanib, foydalanuvchi qaysi tashkilotga tegishli ekani aniqlanishi mumkin.
Exp claim
exp claim tokenning tugash vaqtini bildiradi. Bu vaqt Unix timestamp formatida saqlanadi.
exp orqali:
- token muddati cheklanadi;
- eski tokenlar yaroqsiz qilinadi;
- access token qisqa muddatli qilinadi;
- xavfsizlik siyosati qo‘llanadi.
Agar token muddati tugagan bo‘lsa, backend uni qabul qilmaydi.
Iat claim
iat claim token qachon yaratilganini bildiradi. iat inglizcha issued at so‘zlarining qisqartmasidir.
iat quyidagilar uchun ishlatilishi mumkin:
- token yoshini aniqlash;
- session davomiyligini hisoblash;
- audit ma’lumotlari;
- token rotation jarayonlari;
- xavfsizlik tekshiruvlari.
Sub claim
sub claim token egasini bildiradi. Ko‘pincha bu foydalanuvchi ID’si bo‘ladi.
Misol:
"sub": "user_123"
Backend sub qiymati orqali qaysi foydalanuvchi so‘rov yuborayotganini aniqlashi mumkin.
Iss claim
iss claim tokenni bergan server yoki identity provider’ni bildiradi.
Misol:
"iss": "https://auth.example.com"
Backend token tekshirganda issuer mosligini tekshirishi mumkin.
Aud claim
aud claim token qaysi service yoki audience uchun mo‘ljallanganini bildiradi.
Misol:
"aud": "api.example.com"
Agar token boshqa audience uchun yaratilgan bo‘lsa, API uni rad qilishi mumkin.
JTI claim
jti claim JWT token uchun noyob identifikator beradi. Bu tokenni alohida kuzatish yoki blacklist qilishda ishlatilishi mumkin.
jti quyidagi holatlarda qo‘llanadi:
- token blacklist;
- token revoke;
- audit log;
- replay attack xavfini kamaytirish;
- tokenlarni alohida identifikatsiya qilish.
JWT algoritmlari
JWT turli algoritmlar bilan imzolanishi mumkin.
Keng uchraydigan algoritmlar:
HS256;HS384;HS512;RS256;RS384;RS512;ES256;ES384.
Algoritm token imzosi qanday yaratilishi va tekshirilishini belgilaydi.
HS256
HS256 — HMAC SHA-256 algoritmiga asoslangan JWT imzolash usuli. Unda bitta maxfiy secret key tokenni yaratish va tekshirish uchun ishlatiladi.
HS256 xususiyatlari:
- symmetric key ishlatadi;
- bitta secret bilan imzo yaratiladi va tekshiriladi;
- backend ichki tizimlarida ko‘p ishlatiladi;
- secret maxfiy saqlanishi kerak.
Agar secret tarqalib ketsa, tokenlar soxtalashtirilishi mumkin.
RS256
RS256 — RSA SHA-256 algoritmiga asoslangan JWT imzolash usuli. Unda private key token yaratish, public key esa token tekshirish uchun ishlatiladi.
RS256 xususiyatlari:
- asymmetric key ishlatadi;
- private key maxfiy saqlanadi;
- public key boshqa service’larga berilishi mumkin;
- OAuth va OpenID Connect tizimlarida keng uchraydi.
RS256 ko‘p service tokenni tekshirishi kerak bo‘lgan tizimlarda qulay hisoblanadi.
JWT access token
JWT access token himoyalangan API’ga kirish uchun ishlatiladi. U odatda qisqa muddatli bo‘ladi.
JWT access token ichida quyidagilar bo‘lishi mumkin:
- user ID;
- role;
- permission;
- expiration;
- issuer;
- audience.
Frontend yoki mobile ilova API so‘rovlarida JWT access tokenni yuboradi.
JWT refresh token
JWT refresh token access token muddati tugaganda yangi access token olish uchun ishlatilishi mumkin. Refresh token odatda access tokendan uzoqroq muddat amal qiladi.
- foydalanuvchi login qiladi;
- access token va refresh token oladi;
- access token muddati tugaydi;
- refresh token orqali yangi access token olinadi;
- eski tokenlar yangilanishi yoki bekor qilinishi mumkin.
Refresh token xavfsiz saqlanishi kerak bo‘lgan qiymat hisoblanadi.
Bearer JWT
JWT ko‘pincha Bearer token sifatida yuboriladi.
Misol:
Authorization: Bearer <jwt_token>
Bu usulda token HTTP header ichida backendga yuboriladi. Backend tokenni olib, signature va claimlarni tekshiradi.
JWT va cookie
JWT cookie ichida saqlanishi mumkin. Bunday holatda browser cookie’ni mos so‘rovlar bilan serverga avtomatik yuboradi.
JWT cookie’da saqlanganda quyidagilar muhim:
HttpOnly cookie JavaScript orqali token o‘qilishini cheklaydi.
JWT va localStorage
JWT localStorage ichida ham saqlanishi mumkin. Bunda frontend tokenni JavaScript orqali o‘qib, API so‘rovlariga qo‘shadi.
localStorage xususiyatlari:
- token brauzerda saqlanadi;
- JavaScript orqali o‘qiladi;
- serverga avtomatik yuborilmaydi;
- sahifa yopilgandan keyin ham qolishi mumkin;
- XSS xavfi mavjud bo‘lishi mumkin.
JWT saqlash usuli ilova arxitekturasi va xavfsizlik modeliga bog‘liq bo‘ladi.
JWT va session
JWT sessionga o‘xshash tarzda foydalanuvchi holatini ifodalashi mumkin, lekin ishlash usuli farq qiladi.
Farqlar:
- session ma’lumoti odatda serverda saqlanadi;
- JWT ma’lumotni token ichida saqlashi mumkin;
- session ID serverdagi yozuvga ishora qiladi;
- JWT signature orqali tekshiriladi;
- stateless JWT server session storage talab qilmasligi mumkin;
- sessionni bekor qilish server storage orqali osonroq bo‘lishi mumkin.
JWT ko‘pincha stateless authentication bilan bog‘lanadi.
Stateless JWT
Stateless JWT serverda session saqlamasdan ishlaydi. Har bir so‘rovda token yuboriladi va backend tokenning imzosini tekshiradi.
Stateless JWT xususiyatlari:
- server session storage talab qilmaydi;
- scaling jarayonida qulay bo‘lishi mumkin;
- token ichida claimlar bo‘ladi;
- token muddati tugaguncha amal qiladi;
- revoke qilish uchun blacklist yoki boshqa mexanizm kerak bo‘lishi mumkin.
Bu yondashuv REST API va microservice tizimlarda uchraydi.
JWT validation
JWT validation tokenni tekshirish jarayonidir.
JWT validation bosqichlari:
- token formati to‘g‘ri ekanini tekshirish;
- headerni o‘qish;
- algoritmni tekshirish;
- signature to‘g‘riligini tekshirish;
expmuddati tugamaganini tekshirish;issqiymatini tekshirish;audqiymatini tekshirish;- kerakli claimlar mavjudligini tekshirish;
- blacklist holatini tekshirish.
Validationdan o‘tgan JWT yaroqli hisoblanadi.
JWT decoding
Decoding — JWT header va payload qismini o‘qish jarayoni. JWT Base64URL formatida kodlangan bo‘lgani uchun payloadni o‘qish mumkin.
Decoding orqali:
- claimlar ko‘riladi;
- user ID aniqlanadi;
- expiration ko‘riladi;
- role yoki permission o‘qiladi;
- token tarkibi tahlil qilinadi.
Decoding tokenni tasdiqlash degani emas. Token haqiqiyligini signature validation aniqlaydi.
JWT verification
Verification — JWT imzosini va claimlarini tekshirish jarayoni. Verification token server tomonidan yaratilganini va o‘zgartirilmaganini tasdiqlaydi.
Verification quyidagilarni tekshiradi:
- signature;
- algoritm;
- secret yoki public key;
- expiration;
- issuer;
- audience.
JWT verification bajarilmasa, token ichidagi ma’lumotga ishonib bo‘lmaydi.
JWT blacklist
JWT blacklist bekor qilingan tokenlarni saqlash uchun ishlatiladi. Stateless JWT tabiatan serverda saqlanmagani sababli, logout yoki revoke uchun qo‘shimcha mexanizm kerak bo‘lishi mumkin.
JWT blacklist quyidagi holatlarda ishlatiladi:
- logout;
- refresh token bekor qilish;
- account bloklash;
- parol almashtirish;
- security breach;
- admin tomonidan session tugatish.
Blacklist odatda Redis yoki database’da saqlanishi mumkin.
JWT rotation
JWT rotation eski tokenni yangisiga almashtirish jarayonidir. Bu access token va refresh token tizimlarida ishlatiladi.
Rotation jarayonida:
- client refresh token yuboradi;
- backend tokenni tekshiradi;
- yangi access token yaratadi;
- ba’zan yangi refresh token ham beradi;
- eski refresh token bekor qilinadi.
Token rotation session xavfsizligini boshqarishda ishlatiladi.
JWT va OAuth
OAuth tizimlarida JWT access token yoki ID token sifatida ishlatilishi mumkin. Ayniqsa OpenID Connect jarayonida ID token ko‘pincha JWT formatida bo‘ladi.
OAuth bilan JWT quyidagilarda ishlatiladi:
- Google login;
- GitHub integration;
- identity provider tokenlari;
- access token;
- ID token;
- scope va claimlar;
- token verification.
JWT OAuth tizimlarida identity va access ma’lumotlarini standart formatda uzatishga yordam beradi.
JWT va OpenID Connect
OpenID Connect authentication qatlamida JWT muhim o‘rin tutadi. ID token odatda JWT formatida beriladi.
ID token ichida quyidagilar bo‘lishi mumkin:
- user ID;
- email;
- ism;
- issuer;
- audience;
- expiration;
- authentication vaqti.
OpenID Connect’da JWT foydalanuvchi kimligini tasdiqlovchi token sifatida ishlatiladi.
JWT va microservice
Microservice arxitekturasida JWT user context va ruxsatlarni service’lar orasida uzatishda ishlatilishi mumkin.
Microservice tizimida JWT quyidagilar uchun ishlatiladi:
- API Gateway’da authentication;
- ichki service’larga user ID uzatish;
- role va permission claimlarini yuborish;
- distributed authorization;
- audit log uchun identity saqlash;
- service-to-service trust.
Masalan, API Gateway JWT’ni tekshiradi va user ma’lumotini order service yoki payment service’ga uzatadi.
JWT va API Gateway
API Gateway JWT tekshiruvini markazlashtirishi mumkin. Bunda backend service’lar har bir so‘rovda tokenni alohida tekshirmasligi yoki gatewaydan o‘tgan user ma’lumotlariga tayanishi mumkin.
API Gateway JWT bilan quyidagilarni bajaradi:
- tokenni tekshirish;
- claimlarni o‘qish;
- ruxsatni tekshirish;
- so‘rovni kerakli service’ga yo‘naltirish;
- user contextni header orqali uzatish;
- yaroqsiz tokenli so‘rovlarni rad etish.
Bu yondashuv katta distributed tizimlarda ishlatiladi.
JWT xavfsizligi
JWT xavfsizligi token yaratish, saqlash, yuborish va tekshirish jarayonlariga bog‘liq.
JWT xavfsizligida quyidagilar muhim:
- secret yoki private keyni himoyalash;
- tokenni HTTPS orqali yuborish;
- token expiration belgilash;
- payloadga maxfiy ma’lumot yozmaslik;
- algoritmni qat’iy tekshirish;
- refresh tokenni himoyalash;
- blacklist yoki revoke mexanizmini ishlatish;
- tokenni logga chiqarmaslik;
- token leak xavfini kamaytirish.
JWT noto‘g‘ri ishlatilsa, authentication va authorization xavfsizligiga ta’sir qilishi mumkin.
JWT va XSS
Agar JWT JavaScript orqali o‘qiladigan joyda saqlansa, XSS hujumi tokenni o‘g‘irlash xavfini oshiradi.
XSS bilan bog‘liq holatlar:
- token localStorage’da bo‘lishi;
- token sessionStorage’da bo‘lishi;
- zararli JavaScript ishlashi;
- tokenni tashqi serverga yuborish;
- foydalanuvchi nomidan API so‘rov yuborish.
HttpOnly cookie tokenni JavaScript orqali o‘qishni cheklaydi.
JWT va CSRF
JWT cookie’da saqlansa, browser cookie’ni avtomatik yuboradi. Bu holatda CSRF xavfi yuzaga kelishi mumkin.
CSRF bilan bog‘liq himoya usullari:
- SameSite cookie;
- CSRF token;
- Origin header tekshiruvi;
- Referer header tekshiruvi;
- muhim amallarda qo‘shimcha tasdiqlash.
JWT header orqali yuborilsa, CSRF xavfi ishlash modeliga qarab farq qiladi.
Dasturlashdagi o‘rni
JWT zamonaviy web va API tizimlarida authentication va authorization ma’lumotlarini token ko‘rinishida uzatish uchun ishlatiladigan muhim standartdir. U frontend, backend, mobile, microservice va identity providerlar orasida keng qo‘llanadi.
JWT quyidagi loyihalarda uchraydi:
- REST API;
- GraphQL API;
- SPA frontendlar;
- mobile ilovalar;
- OAuth login;
- OpenID Connect;
- microservice arxitekturasi;
- API Gateway;
- SaaS platformalar;
- admin panellar.
JWT foydalanuvchi yoki service identity’sini token ko‘rinishida standart va tekshiriladigan shaklda uzatish uchun ishlatiladi.
Bog‘liq tushunchalar
Token, Authentication, Authorization, Access token, Refresh token, OAuth, OpenID Connect, API, Cookie, Session, Bearer token, Security