Bosh sahifa Wiki JWT

JWT

JWTJSON 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:

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 — JWT tokenning birinchi qismi. Unda token turi va ishlatilgan imzolash algoritmi haqida ma’lumot bo‘ladi.

Header ichida odatda quyidagilar bo‘ladi:

  • typtoken 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:

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;
  • subtoken egasi yoki user ID;
  • audtoken mo‘ljallangan audience;
  • exptoken tugash vaqti;
  • nbftoken qachondan boshlab amal qilishi;
  • iattoken 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:

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

HS256HMAC 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

RS256RSA SHA-256 algoritmiga asoslangan JWT imzolash usuli. Unda private key token yaratish, public key esa token tekshirish uchun ishlatiladi.

RS256 xususiyatlari:

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:

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.

Refresh token bilan jarayon:

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 cookie ichida saqlanishi mumkin. Bunday holatda browser cookie’ni mos so‘rovlar bilan serverga avtomatik yuboradi.

JWT cookie’da saqlanganda quyidagilar muhim:

  • HttpOnly flag;
  • Secure flag;
  • SameSite sozlamasi;
  • CSRF himoyasi;
  • token expiration;
  • logout mexanizmi.

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;
  • exp muddati tugamaganini tekshirish;
  • iss qiymatini tekshirish;
  • aud qiymatini 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:

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:

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:

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:

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:

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:

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:

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:

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