Asosiy kontentga o‘tish

Maqolalar

Darslik · 2026-05-15 · ~1 daqiqa o‘qiladi · o'rta

JWT autentifikatsiya: xavfsiz amalga oshirish

#security #backend #auth

Mundarija

JWT (JSON Web Token) — API'larda autentifikatsiya uchun keng tarqalgan usul. Lekin uni noto‘g‘ri ishlatish — xavfsizlik teshigi. Keling, to‘g‘ri yo‘lni ko‘ramiz.

JWT qanday ishlaydi#

Token uch qismdan iborat, nuqta bilan ajratilgan: header.payload.signature.

  • Header — algoritm turi
  • Payload — ma'lumot (foydalanuvchi ID, muddat)
  • Signature — server maxfiy kalit bilan imzolagan qism

Muhim: payload shifrlanmagan, faqat base64. Ya'ni har kim uni o‘qiy oladi. Shuning uchun parol yoki maxfiy ma'lumotni JWT ichiga solmang.

Muhim xavfsizlik qoidalari#

1. Qisqa muddat qo‘ying. Access token 15–30 daqiqa yashashi kerak. Uzoq muddatli sessiya uchun alohida refresh token ishlating.

import jwt
from datetime import datetime, timedelta, timezone

payload = {
    "sub": user_id,
    "exp": datetime.now(timezone.utc) + timedelta(minutes=15),
}
token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")

2. Algoritmni tekshiring. Klassik hujum — alg: none. Har doim kutilgan algoritmni aniq ko‘rsating:

jwt.decode(token, SECRET_KEY, algorithms=["HS256"])  # faqat HS256

3. Maxfiy kalitni himoyalang. Kalit .envda, kodda emas. Kuchli va uzun bo‘lsin.

4. Tokenni to‘g‘ri saqlang. Brauzerda localStorage XSS'ga zaif. httpOnly cookie xavfsizroq, lekin CSRF himoyasi kerak bo‘ladi.

Qachon JWT ishlatmaslik kerak#

Agar sizga tokenni tez bekor qilish (logout, ban) kerak bo‘lsa, JWT noqulay — u muddati tugaguncha amal qiladi. Bunday holatda oddiy server-side sessiya (Django'ning standart tizimi) ko‘pincha yaxshiroq. Har doim ehtiyoj asosida tanlang.