JWT (JSON Web Token) nima?
sobes.tech AI
AIdan javob
JSON Web Token (JWT) — bu JSON formatida ma'lumotlarni tomonlar o'rtasida URL uchun mos, xavfsiz va ixcham uzatish usuli.
Ishlash prinsiplari:
-
Token uch qismdan iborat, nuqta (
.) bilan ajratilgan:header.payload.signature. -
Header (Sarlavha): Token haqida meta ma'lumotlarni o'z ichiga oladi, masalan, token turi (JWT) va imzolash algoritmi (masalan, HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Yuklama): "claims" - da'volar yoki o'tkazmoqchi bo'lgan ma'lumotlar. Bir nechta turlari mavjud:
- Ro'yxatdan o'tgan claims: Rezervlangan, ammo ixtiyoriy claims, masalan,
iss(chiqargan),exp(muddati),sub(mavzu). - Jamoat claims: Umumiy foydalanish uchun belgilangan, IANA JSON Web Token Registryda ro'yxatdan o'tgan yoki nomlar bo'sh joyini himoya qiladigan URI bo'lishi kerak.
- Maxfiy claims: Tomonlar o'rtasida kelishilgan tasdiqlovlar.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Ro'yxatdan o'tgan claims: Rezervlangan, ammo ixtiyoriy claims, masalan,
-
Imzo (Signature): Encoded header va payloadni maxfiy va headerda ko'rsatilgan algoritm yordamida birlashtirish orqali yaratiladi. Bu tokenning yaxlitligini ta'minlaydi; agar kimdir header yoki payloadni o'zgartirsa, imzo invalid bo'ladi.
# HS256 yordamida imzo yaratish misoli import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Header) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Payload) secret = 'your_secret_key' # Imzo = HMACSHA256(Base64Url(Header) + "." + Base64Url(Payload), secret) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # Imzoni Base64Url ga kodlash import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Yakuniy token: header_str + '.' + payload_str + '.' + signature_b64url
Qo'llanmalari:
- Autentifikatsiya: Server muvaffaqiyatli autentifikatsiyadan so'ng foydalanuvchiga token beradi. Foydalanuvchi har bir so'rovda bu tokenni yuboradi. Server tokenning haqiqiyligini tekshiradi va resurslarga kirishga ruxsat beradi.
- Ma'lumotlar almashinuvi: Turli xizmatlar o'rtasida xavfsiz kichik hajmdagi ma'lumotlarni uzatish.
Afzalliklari:
- Ixcham: XML bilan taqqoslaganda kamroq ma'lumot uzatish.
- O'z-o'zini yetarli: Token allaqachon foydalanuvchi haqida zarur bo'lgan ma'lumotlarni o'z ichiga oladi, bu esa har bir so'rovda ma'lumotlar bazasiga murojaat qilishni kamaytiradi.
- Stateless: Server o'z tomonida sessiya ma'lumotlarini saqlashga ehtiyoj sezmaydi.
- Kriptografik imzo: Ma'lumotlarning yaxlitligini ta'minlaydi.
Kamchiliklari:
- Tokenni bekor qilish mumkin emas: Bir marta berilgan token, uning muddati o'tguncha amal qiladi, agar qora ro'yxat mexanizmi joriy etilmagan bo'lsa.
- Maxfiy kalitni saqlash: Maxfiy kalit xavfsiz saqlanishi kerak.
- Hajmi:
payloadichidagi ma'lumotlar hajmi oshgani sayin, tokenning o'lchami ham oshadi.