JWT nima va qanday ishlaydi
JWT uchta qismdan iborat: header, payload va signature. Header tokenning turi va imzo algoritmi haqida ma'lumot beradi. Payload foydalanuvchi ma'lumotlari va metadata saqlanadigan joydir. Signature esa tokenning haqiqiyligini tasdiqlash uchun kalit yordamida hisoblangan kriptografik imzo hisoblanadi.
Sayt.uz tajribasida JWT asosan API autentifikatsiyasida va stateless sessionlar uchun ishlatiladi. Token mijoz tomonida saqlanadi va har bir so'rovda Authorization header orqali yuboriladi. Server tokenni tekshiradi va foydalanuvchining huquqlarini aniqlaydi.
Signing algoritmi tanlash
JWT bir nechta signing algoritmlarni qo'llab-quvvatlaydi: HS256, HS512, RS256, ES256 va boshqalar. HS256 simmetrik algoritm bo'lib, bir xil maxfiy kalit ham imzolash, ham tekshirish uchun ishlatiladi. RS256 esa asimmetrik algoritm bo'lib, private key bilan imzolash va public key bilan tekshirish amalga oshiriladi.
Sayt.uz amaliyotida microservice arxitekturasi uchun RS256 tavsiya etiladi, chunki bir nechta xizmatlar public key orqali tokenni tekshirishi mumkin, lekin imzolash huquqi faqat bitta xizmatda qoladi. Monolit ilovalar uchun esa HS256 yetarli va tez ishlaydi.
Secret rotation va kalitni boshqarish
Maxfiy kalit oddiy parol emas, balki kamida 256-bitli tasodifiy qiymat bo'lishi kerak. Uni hech qachon kod ichida saqlamang, environment variable yoki secret manager (HashiCorp Vault, AWS Secrets Manager) orqali yuklang. Kalit har 90 kunda almashtirilishi tavsiya etiladi.
Rotation paytida eski kalitda imzolangan tokenlar darhol ishlamay qolmasligi uchun key versioning ishlatiladi. Token header'ida kid (key ID) maydoni saqlanadi va server bir nechta kalitlarni saqlab, kid asosida to'g'risini tanlaydi. Eski kalit token expiration vaqtidan keyin xavfsiz tarzda o'chiriladi.
Expiration va refresh token
Access token muddati qisqa bo'lishi kerak, odatda 15 daqiqadan 1 soatgacha. Bu o'g'irlangan token bilan zarar yetkazish vaqtini cheklaydi. Foydalanuvchini har 15 daqiqada qayta login qildirmaslik uchun refresh token mexanizmi qo'llanadi. Refresh token uzoq muddatli (7-30 kun) bo'ladi va faqat yangi access token olish uchun ishlatiladi.
Sayt.uz amaliyotida refresh token httpOnly cookie sifatida saqlanadi, chunki bu XSS hujumlaridan himoya qiladi. Har bir refresh paytida eski token bekor qilinib, yangisi beriladi (rotation). Agar bekor qilingan token qayta ishlatilsa, bu o'g'rilik belgisi va barcha sessiyalar majburiy yopiladi.
Keng tarqalgan hujumlar
Eng mashhur hujum "none algorithm" deb ataladi: hujumchi header'da alg maydonini none ga o'zgartiradi va imzosiz tokenni yuboradi. Eski JWT kutubxonalari buni qabul qilardi. Hozirgi versiyalar himoyalangan, lekin har doim kutubxonani yangilab turing va whitelist algoritm qoidasini joriy qiling.
Boshqa muammo algoritm confusion: agar server RS256 va HS256 ni qabul qilsa, hujumchi public key ni HS256 maxfiy kalit sifatida ishlatib token yasashi mumkin. Yechim โ har bir endpoint uchun aniq bitta algoritmni belgilash. Brute force xavfini kamaytirish uchun maxfiy kalit uzun va tasodifiy bo'lishi shart.
Sayt.uz amaliyot
Sayt.uz da JWT konfiguratsiyasi quyidagicha: access token 30 daqiqa, refresh token 7 kun, signing algoritmi RS256, maxfiy kalit AWS Secrets Manager'da, rotation 90 kunda bir marta. Har bir muvaffaqiyatsiz tekshirish loglanadi va anomaliya aniqlangach administrator ogohlantiriladi. Token blacklist Redis'da saqlanadi va logout paytida darhol qo'shiladi.