GH GambleHub

JWT: struktur və boşluqlar

1) JWT nədir və harada istifadə olunur

JWT - «Base64Url» (başlıq) formatında kompakt özünü təmin edən təsdiq konteyneri (claims). Base64Url(payload). Base64Url(signature)`.

Üçün istifadə olunur:
  • JWS (imzalanmış tokenlər - orijinallıq/bütövlük),
  • JWE (şifrəli tokenlər - məxfilik),
  • access/ID tokenləri və service-to-service autentifikasiyası kimi OIDC/OAuth2.

Üstünlüklər: muxtariyyət, caching, kiçik əlavə xərclər. Mənfi cəhətləri: səhv validasiya riski, mürəkkəb geri çağırma halları.

2) JWT strukturu

2. 1 Başlıq (header, JSON)

Minimum: alqoritm və açar identifikatoru.

json
{ "alg": "ES256", "kid": "jwt-2025-10", "typ": "JWT" }

'alg': imza/şifrələmə alqoritmi (RS256/ES256/PS256/HS256 və s.).
'kid': açar göstəricisi (JWKS-rotasiya üçün).
Əlavə açar mənbələri: 'jku', 'x5u' (bax boşluqlar § 6. 3).

2. 2 Faydalı yük (payload, JSON)

Standartlaşdırılmış markalar:
  • `iss` (issuer), `aud` (audience), `sub` (subject)
  • 'exp' (son vaxt), 'nbf' (əvvəl deyil), 'iat' (verilmiş)
  • 'jti' (token identifikatoru, rəy üçün yararlıdır)
  • domain-damğalar: 'scope/roles', 'tenant', 'kyc _ level' və s.

2. 3 İmza (signature)

JWS = `sign(base64url(header) + "." + base64url(payload), private_key)`

Yoxlama: tam uyğun ictimai açar və tam olaraq server gözlədiyi alqoritm.

3) Əsas yoxlama invariantları

1. Alqoritm 'header' məzmununa etibar edilmir, resurs-server konfiqurasiyası (allow-list) ilə müəyyən edilir. alg`.
2. 'iss' və 'aud' dəqiqliyini yoxlayın, 'exp/nbf' - kiçik bir 'clock _ skew' (± 30-60s).
3. Yalnız «kid» olmadan tokenləri rədd edin və rotasiya yoxdur; əks halda - 'kid' tələb edin.
4. Obyekt səviyyəsində avtorizasiya olmadan heç bir markaya etibar etməyin (BOLA-first).
5. Parsinq - kriptovalyuta yoxlamasından sonra; dekodlama əvvəl əsas ölçüsü yoxlama.

4) JWS vs JWE

JWS: imzalanmış, lakin oxumaq. Payload PII/sirləri yerləşdirməyin.
JWE: payload şifrələyir; inteqrasiya daha mürəkkəbdir, əsas model kritikdir.
Əksər API kifayət JWS + payload həssas məlumatlara qadağa.

5) Tokenin həyat dövrü

Access: qısa müddət (5-30 dəqiqə).
Refresh: daha uzun (7-30 gün), rotate-on-use (birdəfəlik), «qara siyahı» saxlamaq 'jti/sid'.
Revocation: TTL ilə 'jti' siyahıları, opaque-tokenlər üçün introspektsiya, hadisələrdə 'exp' ixtisarı.
Açar rotasiyası: JWKS üst üstə (köhnə + yeni), «Açar rotasiyası» məqaləsinə baxın.

6) Tez-tez zəifliklər və onları necə bağlamaq olar

6. 1 'alg = none '/alqoritmin dəyişdirilməsi

Mahiyyət: server 'alg' sahəsinə etibar edir və imzalanmamış tokeni qəbul edir.
Müdafiə: serverdə sərt alqoritmlər allow-list; 'none' və gözlənilməz dəyərləri rədd edin.

6. 2 RS256 → HS256 swap (simmetrizasiya)

Mahiyyət: təcavüzkar 'alg' HS256 əvəz edir və HMAC gizli kimi ictimai açardan istifadə edir.
Müdafiə: konfiqurasiya alqoritminə açar bağlamaq; bir 'kid' simmetrik/asimmetrik provayderləri qarışdırmayın.

6. 3 Enjeksiyon açarları ('kid/jku/x5u')

Ssenarilər:
  • 'jku' təcavüzkarın nəzarət etdiyi JWKS-ə işarə edir (açarını qoyacaq).
  • 'x5u '/' x5c' xarici sertifikatlardan sui-istifadə.
  • 'kid' enjeksiyon yolu/SQL ('../../privkey. pem "'və ya' '' OR 1 = 1 -- '').
Müdafiə:
  • Silinmiş 'jku/x5u' görməməzliyə vurun və ya ciddi allow-list domenləri ilə süzün.
  • 'kid' yalnız yerli kataloq (cədvəl/önbellək) açarı kimi istifadə olunur, heç bir fayl yolları/SQL konkatenasiya.
  • JWKS etibarlı URL ilə göndərmək, qısa TTL, imza/pinning kanal.

6. 4 Zəif HS256 sirləri (brutfors)

Mahiyyət: HMAC-gizli qısa/sızma → imzanın dəyişdirilməsi.
Qorunma: Asimmetriya (RS/ES/PS) və ya 256 bit ≥ gizli uzunluqdan istifadə edin, sırlar yalnız KMS-də.

6. 5 itkin/qeyri-palid markalar

No 'aud '/' iss '/' exp' → token xaç xidməti uyğun və ya sonsuzdur.
Çox uzun 'exp' → güzəşt riski.
Müdafiə: 'exp' qısa, 'nbf '/' iat' markalarının tam dəstini tələb etmək, 'clock _ skew' ilə təsdiqləmək.

6. 6 Replay və token oğurluğu

Mahiyyət: tokenin tutulması/təkrarlanması (loqlarda sızma, XSS, TLS olmadan MitM).

Müdafiə:
  • TLS везде, `Secure`+`HttpOnly` cookie, SameSite=Lax/Strict.
  • Partnyorlar üçün DPoP/PoP (tokenin müştəri açarına bağlanması) və/və ya mTLS.
  • Qısa 'exp', refresh-rotasiya, device-binding.

6. 7 XSS/saxlama vasitəsilə sızma

Mahiyyət: JWT-ni 'localStorage '/' sessionStorage' → JS-də saxlamaq.
Qorunma: access-tokenləri HttpOnly-cookie-də saxlayın (cookie-model mümkündürsə) + ciddi CSP/Trusted Types.
Cookie olmadan SPA üçün - yaddaşdakı tokeni təcrid etmək, minimum yaşamaq, XSS-dən qorumaq.

6. 8 CSRF

Mahiyyət: cookies seanslarında üçüncü tərəf saytından sorğular.
Qorunması: SameSite, anti-CSRF tokenləri (double submit), 'Origin/Referer' yoxlama, Fetch-Metadata filtrləri.

6. 9 Oversize/ölçüsü sui-istifadə

Mahiyyət: böyük payload/başlıqlar, parsing üçün DoS.
Qorunma: başlıqlar/bədən ölçüsü limitləri, early-reject 431/413, markaların fiks dəsti.

6. 10 'typ '/' cty'

Mahiyyət: «JWT» növlərinin qarışıqlığı ('typ:' JWT '), daxili JOSE obyektləri.
Mühafizə: təhlükəsizlik üçün 'typ/cty' görməməzlikdən gələrək, sabit alqoritmlərə və markaların sxeminə güvənmək.

7) Tokenlərin saxlanması və ötürülməsi

7. 1 Server API (machine-to-machine)

mTLS/HMAC, tercihen JWT üçün asimmetriya, kanallar - mesh vasitəsilə.
Açar saxlama - KMS/HSM, cədvəl üzrə rotasiya, üst-üstə düşən JWKS.

7. 2 Brauzer müştəriləri

HttpOnly Secure Cookie для access/refresh; qısa TTL; yeniləmə - yalnız HTTPS altında 'SameSite = None' ilə «silent refresh» vasitəsilə.
Ciddi CSP, Trusted Types, XSS qorumaq; SPA üçün - mümkünsə tokeni diskdə saxlamayın.

8) JWKS, rotasiya və geri çağırış

JWKS avtorizator tərəfindən dərc olunur; istehlakçılar 5-15 dəqiqə keşlər.
Rotasiya planı: yeni 'kid' əlavə → onlara imza başlamaq → N gün sonra JWKS → purge köhnə silmək.
Baxış: 'jti/sid' c TTL siyahıları; hadisə müvəqqəti qısaldılması 'exp' və fors-logout (əlil refresh).

9) Multi-tenant və məlumatların minimuma endirilməsi

Yalnız memarlıq lazım olduqda 'tenant '/' org' tokeninə daxil edin; əks halda 'sub' PDP atributları çəkmək.
Heç bir PII; → sızma və korelasiya riski daha azdır.

10) Praktik validasiya yoxlama siyahısı (resurs serveri)

  • Parsim yalnız imzanı və əsas ölçü limitlərini yoxladıqdan sonra.
  • 'alg' konfiqurasiya; gözlənilməz rədd.
  • 'iss' ∧ 'aud' ∧ 'exp' ∧ 'nbf' ∧ 'iat' (c 'clock _ skew').
  • Yerli kataloq/JWKS (qısa TTL) üzrə 'kid' yoxlayın.
  • Xarici işarələri süzün/normallaşdırın ('jku/x5u' - yalnız allow-list).
  • Markaların uzunluğunu/tərkibini məhdudlaşdırın (sxem).
  • Resurs üçün obyekt icazəsini tətbiq edin (BOLA-first).
  • Log 'kid', 'sub', 'aud', 'iss', 'jti', 'exp', 'tenant', 'trace _ id' (PII olmadan).
  • İmza səhvlərinin, gecikmələrin, rotasiya auditinin metrikası.

11) Təhlükəsiz siyasət nümunələri (psevdo)

11. 1 Alqoritm gözləntilərinin konfiqurasiyası

yaml jwt:
expected_issuer: "https://auth. example. com"
expected_audience: ["wallet-service"]
allowed_algs: ["ES256"] # fix the jwks_url: "https ://auth. example. com/.well-known/jwks. json"
jwks_cache_ttl: 600s clock_skew: 60s required_claims: ["iss","aud","sub","exp","iat"]

11. 2 Uzaqdan 'jku/x5u' imtina

yaml reject_untrusted_key_sources: true allowed_jku_hosts: ["auth. example. com"] # if absolutely necessary

11. 3 Baxış siyahısı nümunəsi (Redis)

pseudo if redis. exists("revoke:jti:" + jti) then deny()
if now() > exp then deny()

12) Müşahidə və forensika

Метрики: `jwt_verify_fail_total{reason}`, `jwt_expired_total`, `jwks_refresh_total`, доля `kid`.
Log (strukturlaşdırılmış): 'iss/aud/sub/kid/jti/exp/tenant/trace _ id', uğursuzluq səbəbi.
Daşbordlar: «tezliklə bitir», validasiya səhvlərinin artması, bölgələrə/müştərilərə paylanması.
Alertlər: 'verify _ fail' (imza/alqoritm), JWKS səhvləri, vaxtı keçmiş tokenlərin payları.

13) Antipattern

Etibarlı 'alg' token; dəstək 'none'.
Uzunmüddətli access-tokenlər və refresh-rotasiya yoxdur.
HS256 olmadan ENV-də qısa sirr/sirr.
Hər hansı bir domendən 'jku/x5u' qəbul edin; dinamik allow-list olmadan JWKS yükləmək.
Payload JWS PII/sirləri qoyun.
XSS riskləri olduqda 'localStorage' tokenlərini saxlayın.
Validasiya səhvlərini boğun («yumşaq error» ilə 200 qaytarın).
UŞAQ yoxlamalarının olmaması və yalnız 'scope/role' etibar.

14) iGaming/Maliyyə Xüsusiyyətləri

Damğalar: 'kyc _ level', 'risk _ tier', 'tenant', sərt 'aud'.
Write əməliyyatları üçün qısa TTL (depozitlər/çıxışlar), kritik marşrutlar üçün PoP/DPoP və ya mTLS.
Tənzimləyici audit: dəyişməz giriş/uğursuzluq jurnalları, region sərhədləri daxilində qeydlərin saxlanması.
Partnyorların/PSP-lərin ayrı-ayrı açarları/' aud ', per-tenant açarları və ayrı-ayrı JWKS-ləri var.

15) Prod hazırlıq yoxlama siyahısı

  • Sərt alqoritmlər siyahısı; 'none' qadağandır.
  • 'iss/aud/exp/nbf/iat/jti' yoxlanılır; qısa 'exp'.
  • JWKS üst-üstə, qısa TTL cache; 'kid' paylarının monitorinqi.
  • Refresh — rotate-on-use; TTL ilə 'jti/sid' siyahıları; baxış playbook.
  • Kritik marşrutlarda PoP/DPoP və ya mTLS.
  • Brauzer üçün HttpOnly-cookies, CSP/Trusted Types vs XSS; CSRF qorunması.
  • Payload PII olmadan; minimum markalar dəsti.
  • Validasiya və uğursuzluqlar üzrə metriklər/loqlar; alertlər JWKS/verify_fail.
  • Mənfi ssenarilərin testləri: RS → HS swap, 'kid' inyeksiyaları, 'jku' spoofing, oversize, clock-skew.

16) TL; DR

Alqoritmi və açarları server tərəfinə yazın, 'alg' tokeninə etibar etməyin, 'iss/aud/exp/nbf/iat/jti' tələb edin. Açarları üst-üstə düşən JWKS vasitəsilə çevirin, tokenləri qısa ömürlü, refresh isə birdəfəlik saxlayın. Tokenləri təhlükəsiz saxlayın (veb üçün HttpOnly cookie), markaları minimuma endirin, PII qoymayın. 'jku/x5u/kid' -vektorları bağlayın, zəif sirlərlə HS256 çəkinin, kritik yollara PoP/DPoP və ya mTLS əlavə edin və həmişə resurs səviyyəsi üçün BOLA testləri edin.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.