JWT: bu nədir, JSON Web Token strukturu və istifadəsi

Müəllif: IT Sectr Dərc olunub: 2026-04-05 Oxuma vaxtı: 9 dəq

JWT (JSON Web Token) — bu, tərəflər arasında məlumatların rəqəmsal imza ilə qorunan JSON obyekti şəklində ötürülməsi üçün kompakt formatdır. Token HMAC (simmetrik açar) və ya RSA/ECDSA (asimmetrik cüt) vasitəsilə imzalana bilər ki, bu da məlumatların bütövlüyünü və həqiqiliyini təmin edir. IETF RFC 7519, 2015-ə görə, JWT milyonlarla tətbiqdə autentifikasiya, təhlükəsiz claims mübadiləsi və OpenID Connect-də ID Token formatı kimi istifadə olunur.

Əsas məqamlar

  • JWT — yoxlama üçün bütün məlumatları özündə saxlayan özünü təmin edən token
  • Struktur — üç hissə: header, payload və signature, nöqtələrlə ayrılmış
  • İmza — token yaradıldıqdan sonra məlumatların dəyişdirilmədiyini təmin edir
  • Stateless — server sessiyanı saxlamalı deyil, bu miqyaslamağı asanlaşdırır
  • Təhlükəsizlik — JWT məlumatları şifrələmir, yalnız imzalayır; həssas məlumatlar payload-a yerləşdirilməməlidir

JWT nədir?

JSON Web Token (JWT) — bu, tərəflər arasında məlumatların JSON obyekti şəklində ötürülməsi üçün kompakt və özünü təmin edən üsulu müəyyən edən açıq standartdır (RFC 7519). JWT-də olan məlumat claims adlanır — subyekt (istifadəçi) və əlavə atributlar haqqında təsdiqlər. Hər claim açar-dəyər cütüdür: istifadəçi identifikatoru, rol, bitmə müddəti, verən.

JWT özünü təmin edən adlanır, çünki yoxlama üçün bütün məlumat tokenin öz daxilindədir. Server tokenin etibarlılığına əmin olmaq üçün verilənlər bazasına və ya xarici yaddaşa müraciət etməli deyil — imzanı yoxlamaq kifayətdir. Bu xüsusiyyət JWT-ni paylanmış sistemlər və bir neçə xidmətin ümumi sessiya yaddaşı olmadan sorğuları autentifikasiya etməli olduğu mikroxidmət arxitekturası üçün ideal edir.

Auth0, 2025 məlumatlarına görə, mobil və veb tətbiqlərin 65%-dən çoxu API autentifikasiyası üçün əsas token formatı kimi JWT-dən istifadə edir, qeyri-şəffaf tokenləri (opaque tokens) və sessiya identifikatorlarını qabaqlayır.

JWT strukturu: header, payload və signature

JWT nöqtələrlə ayrılmış üç hissədən ibarətdir: header.payload.signature. Hər hissə Base64url ilə kodlanmış JSON-dur. Hər hissəyə ətraflı baxaq.

Header — alqoritm və token növü

Header iki məcburi sahə ehtiva edir: alg (algorithm — imza alqoritmi) və typ (type — token növü, həmişə “JWT”). Alqoritm simmetrik (HS256 — HMAC SHA-256 ilə) və ya asimmetrik (RS256 — RSA SHA-256 ilə, ES256 — ECDSA P-256 ilə) ola bilər. Asimmetrik alqoritmlər daha üstündür, çünki müştəriyə gizli açarı bilmədən imzanı yoxlamağa imkan verir.

Dekodlanmış header nümunəsi:

json
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "key-id-1"
}

Payload — claims və məlumatlar

Payload claims — subyekt haqqında təsdiqləri ehtiva edir. Claims üç növə bölünür: qeydiyyatdan keçmiş (iss, sub, aud, exp, nbf, iat, jti), ictimai (IANA Registry-də tərtibatçı tərəfindən müəyyən edilən) və özəl (tərəflər arasında razılaşdırılmış). sub (subject) — istifadəçinin unikal identifikatoru. exp (expiration) — tokenin bitmə vaxtı. iss (issuer) — tokeni verən.

json
{
  "sub": "user-abc-123",
  "iss": "https://auth.example.com",
  "aud": "my-mobile-app",
  "exp": 1812345678,
  "iat": 1812342078,
  "role": "premium_user"
}

Signature — bütövlüyün yoxlanması

Signature gizli və ya özəl açardan istifadə edərək header və payload-ın birləşməsinə imza alqoritminin tətbiqi ilə yaradılır. Formula: HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret) HMAC üçün, və ya RSASHA256(...) asimmetrik alqoritm üçün. Qəbul edən eyni üsulla imzanı hesablayır və alınanla müqayisə edir — uyğun gələrsə, məlumatlar dəyişdirilməyib.

JWT necə işləyir: yaradılma və yoxlama

İşləmə prosesi JWT iki mərhələdən ibarətdir: autentifikasiya serveri tərəfindən tokenin yaradılması (buraxılması) və müştəri və ya resurs serveri tərəfindən tokenin yoxlanması. Autentifikasiya serveri istifadəçinin məlumatlarını alır, claims ilə payload yaradır və imzalayır. Yaranan JWT müştəriyə giriş sorğusuna cavab olaraq və ya OAuth 2.0 / OpenID Connect cavabının gövdəsində göndərilir.

Mobil autentifikasiyada JWT

Mobil tətbiqlərdə JWT aşağıdakı şəkildə istifadə olunur: uğurlu girişdən sonra istifadəçi JWT formatında access token alır. Tətbiq onu təhlükəsiz yaddaşda saxlayır (iOS-da Keychain, Android-də EncryptedSharedPreferences). Hər API sorğusunda tətbiq Authorization: Bearer <token> başlığını əlavə edir. API serveri JWT imzasını yoxlayır, claims çıxarır və onların əsasında giriş qərarı verir — verilənlər bazasına müraciət etmədən.

Google Codelabs, 2025 məlumatlarına görə, Firebase Authentication-da JWT istifadəsi sessiya tokenləri ilə müqayisədə autentifikasiya serverinə sorğuların sayını 40–60% azaldır, çünki məlumatlar hər mikroxidmətdə lokal olaraq yoxlanılır. Bu, xüsusilə yüksək yüklü arxitekturalarda vacibdir, burada hər millisaniyə gecikmə istifadəçi təcrübəsinə təsir edir. Dəqiqədə 50 000 sorğuda JWT-yə keçid introspection sorğularını emal edən 10 server instansiyasına qədər qənaət edə bilər.

JWT vs Session Token

JWT və Session Token eyni vəzifəni həll edir — sorğuların autentifikasiyası — lakin arxitektura baxımından prinsipial fərqlənir. Session Token serverdə saxlanılan sessiya məlumatlarına istinad edən təsadüfi identifikator sətridir (stateful). JWT — bütün məlumatları özündə saxlayan özünü təmin edən tokendir (stateless).

ParametrJWTSession Token
Məlumatların saxlanmasıToken daxilində (özünü təmin edən)Serverdə (sessiya yaddaşı)
MiqyaslamaOrtaq yaddaş tələb etmirÇox server üçün Redis/DB tələb edir
Tokenin ləğviMürəkkəb (qara siyahı lazımdır)Sadə (sessiyanı DB-dən silmək)
ÖlçüBöyük (500–2000 bayt)Kiçik (16–64 bayt)
İmza yoxlanmasıKriptoqrafikYox (sətirlərin müqayisəsi)

JWT-nin üstünlükləri və çatışmazlıqları

JWT paylanmış sistemlərdə üstündür: mikroxidmətlər tokeni ortaq yaddaş olmadan lokal olaraq yoxlaya bilər. Məsələn, beş mikroxidmətli arxitekturada hər xidmət JWT-ni 1–2 ms-də şəbəkə çağırışı olmadan yoxlayır, halbuki session token hər sorğuda mərkəzləşdirilmiş Redis-ə müraciət tələb edir, 10–30 ms gecikmə əlavə edir. Lakin JWT-ni ləğv etmək çətindir — token artıq buraxılıbsa, bitmə müddətinə qədər etibarlıdır. Session Token-i DB və ya Redis-dən qeydi silməklə asanlıqla ləğv etmək olar.

Mobil tətbiqlər üçün kombinə edilmiş yanaşma — qısa ömürlü (15–30 dəqiqə) JWT və Refresh Token — performans və təhlükəsizlik arasında tarazlıq verir. JWT API-ə giriş üçün istifadə olunur, refresh token (adətən opaque) isə yeni JWT-lər əldə etmək üçün. JWT kompromizasiyası halında təcavüzkarın 15–30 dəqiqə girişi olur; refresh token kompromizasiyası halında sessiya rotation və təkrar istifadə aşkarlanması vasitəsilə bloklanır.

JWT təhlükəsizliyi

Təhlükəsizlik JWT düzgün tətbiqdən asılıdır. Ən geniş yayılmış zəiflik “alg none” hücumudur: təcavüzkar tokenin header-ni “alg”: “none” olaraq dəyişir və server alqoritmi yoxlamadan saxta tokeni qəbul edir. Qorunma: header-dəki alqoritmin gözlənilənə (RS256, ES256) uyğun olduğunu həmişə yoxlamaq və alg: none olan tokenləri rədd etmək.

Tipik zəifliklər

Zəifliklər JWT həmçinin daxildir: HMAC üçün zəif gizli açar (dəqiqələr ərzində sındırma), özəl açarın sızması (server adından istənilən məlumatı imzalamaq), payload-da həssas məlumatların saxlanması (JWT şifrələmir, yalnız imzalayır), JWK header injection hücumu (öz ictimai açarının daxil edilməsi). Etibarlı kitabxanaların istifadəsi — Nimbus JOSE + JWT, jjwt (io.jsonwebtoken), PyJWT — bu zəifliklərin istismar riskini azaldır.

Əlavə qorunma tədbiri — JWK Thumbprint (RFC 7638): header-də barmaq izi (thumbprint) vasitəsilə ictimai açarın tokenə bağlanması. Server hər müştəri üçün gözlənilən thumbprint saxlayırsa, JWK header injection hücumu qeyri-mümkün olur — server qeydiyyatdan keçmişlə uyğun gəlməyən istənilən açarı rədd edir. OAuth Security Workshop 2025, maliyyə və tibbi tətbiqlərdə istifadə olunan bütün JWT-lər üçün JWK Thumbprint-i məcburi qorunma kimi tövsiyə edir.

Kod nümunəsi: Kotlin-də JWT ilə iş

jjwt kitabxanası (auth0/java-jwt) Android tətbiqində bir neçə sətirdə JWT yaratmağa və yoxlamağa imkan verir. Aşağıdakı nümunədə server sub və role ilə token yaradır, müştəri isə imzanı yoxlayır. Serverdə gizli açarın təhlükəsiz saxlanması üçün mühit dəyişənləri və ya HSM (Hardware Security Module) istifadə edin — açarın kodda və ya konfiqurasiya faylında saxlanması kobud təhlükəsizlik səhvdir.

JWT generasiyası

kotlin
val secret = "my-256-bit-secret-key-here"
val token = JWT.create()
    .withSubject("user-abc-123")
    .withIssuer("auth.example.com")
    .withClaim("role", "premium_user")
    .withExpiresAt(Date(System.currentTimeMillis() + 3600000))
    .sign(Algorithm.HMAC256(secret))

// Tokenin müştəriyə göndərilməsi
println("JWT: $token")

JWT yoxlanması

kotlin
fun verifyToken(token: String): Boolean {
    return try {
        val decoded = JWT.require(Algorithm.HMAC256(secret))
            .withIssuer("auth.example.com")
            .build()
            .verify(token)
        // İmza düzgündür, claims çıxarıldı
        println("Subject: ${decoded.subject}")
        true
    } catch (e: Exception) {
        println("Token invalid: ${e.message}")
        false
    }
}

Tez-tez verilən suallar

JWT-də şifrələr saxlamaq olarmı?

Xeyr. JWT imzalanır, şifrələnmir — hər kəs Base64 payload-u dekodlaya və məlumatları oxuya bilər. Həssas məlumatlar (şifrələr, kart nömrələri, şəxsi məlumatlar) yalnız JWE (JSON Web Encryption) vasitəsilə şifrələnmiş formada ötürülməlidir.

Hansı JWT imza alqoritmi ən təhlükəsizdir?

ES256 (ECDSA P-256 ilə) tövsiyə olunur — o, əhəmiyyətli dərəcədə kiçik imza ölçüsü ilə RSA 2048-bit ekvivalent təhlükəsizlik səviyyəsini təmin edir. Köhnə sistemlərlə uyğunluq üçün RS256 uyğundur. HS256 (HMAC) gizli açarın təhlükəsiz mübadiləsini tələb edir ki, bu da paylanmış arxitekturada daha çətindir.

JWT-ni müddəti bitməzdən əvvəl necə ləğv etmək olar?

JWT birbaşa ləğv edilə bilməz — exp-ə qədər etibarlıdır. Həll yolları: qısa ömür müddəti (15–30 dəqiqə) istifadə etmək, serverdə ləğv edilmiş jti (JWT ID) qara siyahısını aparmaq və ya tokenləri gizli açarın versiyasına bağlamaq. Refresh token standart üsulla — yaddaşdan silməklə ləğv edilir.

JWT Bearer tokendən nə ilə fərqlənir?

Bearer token — bu konsepsiyadır: sahibinin (bearer) giriş üçün istifadə edə biləcəyi istənilən token. JWT — tokenin konkret formatıdır. Bearer token JWT və ya opaque string ola bilər. JWT Bearer konsepsiyasına özünü təmin etmə və kriptoqrafik yoxlama əlavə edir.

JWT-nin hansı ölçüsü normal sayılır?

RS256 imzası olan tipik JWT 500–2000 bayt təşkil edir. Payload çox sayda fərdi claims ehtiva edərsə və ya böyük açarla asimmetrik imza istifadə olunarsa, ölçü 4–5 KB-a çata bilər. Bu, session tokendən (16–64 bayt) əhəmiyyətli dərəcədə çoxdur ki, bu da HTTP başlıqlarının ölçüsünə təsir edir.

Nəticələr

  • JWT — rəqəmsal imza ilə JSON formatında kompakt özünü təmin edən token
  • Struktur — üç hissə: header (alqoritm), payload (claims), signature (imza)
  • Stateless — server tokeni verilənlər bazasına müraciət etmədən yoxlayır
  • JWT vs Session — JWT miqyaslamada üstündür, Session ləğvdə üstündür
  • Təhlükəsizlik — alg none, zəif açarlar və JWK injection-dan qorunma məcburidir
  • Payload şifrələnmir — həssas məlumatlar JWE tələb edir
  • JWT — OpenID Connect-də ID Token və Firebase Authentication tokenlərinin standart formatı

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun