GH GambleHub

JWT: gurluşy we gowşaklygy

1) JWT näme we nirede ulanylýar

JWT - 'Base64Url (header) formatynda öz-özüne ýeterlik tassyklama konteýneri (claims). Base64Url(payload). Base64Url(signature)`.

Şu üçin ulanylýar:
  • JWS (gol çekilen bellikler - hakykylyk/bitewilik),
  • JWE (şifrlenen bellikler - gizlinlik),
  • access/ID bellikleri, şeýle hem service-to-service autentifikasiýasy hökmünde OIDC/OAuth2.

Artykmaçlyklary: özbaşdaklyk, keş, az goşmaça çykdajylar. Minuslar: nädogry tassyklama töwekgelçiligi, yzyna çagyrmagyň çylşyrymly ýagdaýlary.

2) JWT gurluşy

2. 1 Sözbaşy (başlyk, JSON)

Iň az: algoritm we açar identifikatory.

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

'alg': gol/şifrlemek algoritmi (RS256/ES256/PS256/HS256 we ş.m.).
'kid': açar görkeziji (JWKS-aýlanyş üçin).
Açarlaryň opsiýa çeşmeleri: 'jku', 'x5u' (gowşaklyga serediň § 6. 3).

2. 2 Peýdaly ýük (payload, JSON)

Standartlaşdyrylan bellikler:
  • `iss` (issuer), `aud` (audience), `sub` (subject)
  • 'exp' (gutarýan wagty), 'nbf' (öň däl), 'iat' (berlen)
  • 'jti' (Token identifikatory, synlar üçin amatly)
  • domain-markalar: 'scope/roles', 'tenant', 'kyc _ level' we ş.m.

2. 3 Gol (signature)

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

Barlag: jemgyýetçilik açary we serweriň garaşýan algoritmi bilen berk gabat gelýär.

3) Barlagyň esasy üýtgemeleri

1. Algoritm 'header' mazmunyna ynanman, çeşme-serweriň (allow-list) konfigurasiýasy bilen kesgitlenýär. alg`.
2. 'iss' we 'aud' -y takyk gabat gelmek üçin barlaň, 'exp/nbf' - kiçijik 'clock _ skew' (30-60s ±) göz öňünde tutulyp.
3. Diňe ýeke-täk açar we aýlaw ýok bolsa, "kid" belgisiz ret etmek; ýogsam 'kid' -ni talap etmeli.
4. Obýekt derejesinde ygtyýarnamasyz hiç bir bellige ynanmaň (BOLA-first).
5. Parsing - kripto barlagyndan soň; kodlaşdyrylýança esasy ölçegleri barlamak.

4) JWS vs JWE

JWS: gol çekildi, ýöne okaýarys. Payload PII/syrlary goýmaň.
JWE: payload; integrasiýa has kyn, esasy model kritikdir.
API-leriň köpüsinde JWS + payload-da duýgur maglumatlary gadagan etmek ýeterlikdir.

5) Tokeniň ömri

Access: gysga möhlet (5-30 minut).
Refresh: has uzyn (7-30 gün), rotate-on-use (bir gezek ulanylýan), "gara sanawy" 'jti/sid' saklamak.
Revocation: TTL bilen 'jti' sanawlary, opaque-tokenler üçin introspektsiýa, hadysalarda 'exp' gysgaldylýar.
Açar aýlawy: JWKS (köne + täze), "Açar aýlawy" makalasyna serediň.

6) Ýygy-ýygydan gowşaklyklar we olary nädip ýapmaly

6. 1 'alg = none '/algoritmi çalyşmak

Netije: serwer 'alg' meýdanyna ynanýar we gol çekilmedik tokeni kabul edýär.
Gorag: serwerdäki algoritmleriň gaty allow-list; 'none' we garaşylmadyk bahalary ret etmek.

6. 2 RS256 → HS256 swap (simmetrizasiýa)

Netije: hüjümçi 'alg' HS256 çalyşýar we HMAC-syr hökmünde köpçüligiň açaryny ulanýar.
Gorag: açary konfigurasiýa algoritmine birikdirmek; simmetrik/asimmetrik üpjün edijileri bir 'kid' -de garyşdyrmaly däldir.

6. 3 Açar sanjymlary ('kid/jku/x5u')

Ssenariler:
  • 'jku' hüjümçi tarapyndan dolandyrylýan JWKS-ni görkezýär (açaryny dakar).
  • 'x5u '/' x5c' daşarky şahadatnamalary hyýanatçylykly ulanmak.
  • 'kid' ýoly bilen/SQL ('../../privkey. pem '' veya '' 'OR 1 = 1 --' ').
Gorag:
  • Uzakdaky 'jku/x5u' -ny äsgermezlik ediň ýa-da domenleriňizi berk allow-list süzüň.
  • 'kid' -ni diňe ýerli katalogda açar hökmünde (tablo/kesh), faýl ýollary/SQL konkatenasiýasyz ulanyň.
  • JWKS ynanylan URL-den ýüklemek, gysga TTL, gol/pinning kanaly.

6. 4 HS256 gowşak syrlary (brutfors)

Netijesi: HMAC-gizlin gysga/syzmak → goly çalyşmak.
Gorag: asimmetriýany (RS/ES/PS) ýa-da syryň uzynlygyny ulanmak ≥ 256 bit, syrlar - diňe KMS-de.

6. 5 Ýok/galyp däl markalar

Ýok 'aud '/' iss '/' exp' → tokeni kross-service üçin amatly ýa-da tükeniksiz.
Gaty uzyn 'exp' → eglişik töwekgelçiligi.
Gorag: 'exp' gysga, 'nbf '/' iat' -ni 'clock _ skew' bilen tassyklamaly.

6. 6 Replay we token ogurlamak

Düýp manysy: tokeni tutmak/gaýtalamak (loglarda syzmak, XSS, TLS-siz MitM).

Gorag:
  • TLS везде, `Secure`+`HttpOnly` cookie, SameSite=Lax/Strict.
  • Hyzmatdaşlar üçin DPoP/PoP (tokeni müşderi açary bilen baglanyşdyrmak) we/ýa-da mTLS.
  • Gysga 'exp', refresh-rotasiýa, device-binding.

6. 7 XSS/ammar arkaly syzmak

JWT-ni 'localStorage '/' sessionStorage' → JS-de saklamak.
Gorag: access-tokenleri HttpOnly-cookie-de saklamak (cookie-model mümkin bolsa) + berk CSP/Trusted Types.
SPA üçin cookie ýok - belligi ýatda izolirlemek, minimal ýaşamak, XSS-den goramak.

6. 8 CSRF

Düýp manysy: kuku sessiýalarynda üçünji tarapyň saýtyndan haýyşlar.
Gorag: SameSite, anti-CSRF bellikleri (double submit), 'Origin/Referer' barlag, Fetch-Metadata süzgüçleri.

6. 9 Oversize/Ölçegi hyýanatçylykly peýdalanmak

Düýp manysy: ullakan töleg/sözbaşylar, parsing üçin DoS.
Gorag: sözbaşy/beden ölçegleriniň çäkleri, early-reject 431/413, bellikleriň fiks-toplumy.

6. 10 'typ '/' cty' çalyşmagy

Esasy zat: JOSE obýektleri tarapyndan ýerleşdirilen görnüşleriň bulaşyklygy ('typ:' JWT '').
Gorag: Howpsuzlyk üçin 'typ/cty' -ni äsgermezlik ediň, kesgitlenen algoritmlere we belliklere bil baglaň.

7) Bellikleri saklamak we geçirmek

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

mTLS/HMAC, has gowusy JWT üçin asimmetriýa, kanallar - mesh arkaly.
Açar ammary - KMS/HSM, meýilnama boýunça aýlanma, JWKS bilen örtük.

7. 2 Brauzer müşderileri

HttpOnly Secure Cookie для access/refresh; gysga TTL; täzelenme - "silent refresh" bilen 'SameSite = None' diňe HTTPS-de.
Berk CSP, Ygtybarly görnüşler, XSS-den goramak; SPA üçin - mümkin bolsa, belligi diskde saklamaň.

8) JWKS, aýlaw we yzyna almak

JWKS ygtyýarlandyryjy tarapyndan çap edilýär; sarp edijiler 5-15 minut keş.
Aýlanyş meýilnamasy: täze 'kid' goşmak → olara gol çekip başlamak → N günden soň JWKS → purge-den köne belgini aýyrmak.
Jogap: 'jti/sid' c TTL sanawlary; waka ýüze çykan halatynda "exp" we fors-logout (refresh maýyp etmek) wagtlaýynça gysgaldylýar.

9) Multi-tenant we maglumatlary azaltmak

'tenant '/' org' belgisini diňe arhitektura boýunça açmak; "sub" -da PDP-den atributlary çekmek.
PII ýok; iň az bellik toplumy → syzmak we korelýasiýa töwekgelçiligi az.

10) Iş ýüzünde tassyklaýyş çek-sanawy (resurs serweri)

  • Parsim diňe goly we esasy ululyk çäkleri barlanylandan soň.
  • 'alg' konfigurasiýadan; garaşylmadyk zatlary ret etmek.
  • Barlaň 'iss' ∧ 'aud' ∧ 'exp' ∧ 'nbf' ∧ 'iat' (c 'clock _ skew').
  • 'kid' -ni ýerli katalog/JWKS (gysga TTL) boýunça barlaň.
  • Daşarky görkezijileri süzmek/kadalaşdyrmak ('jku/x5u' - diňe allow-list).
  • Bellikleriň uzynlygyny/düzümini çäklendirmek (shema).
  • Çeşmä obýekt ygtyýarnamasyny ulanmak (BOLA-first).
  • 'kid', 'sub', 'aud', 'iss', 'jti', 'exp', 'tenant', 'trace _ id' (PII-siz).
  • Gol ýalňyşlyklarynyň, gijikdirmeleriň, aýlaw barlagynyň metrikleri.

11) Howpsuz syýasatlaryň mysallary (psevdo)

11. 1 Algoritmiň garaşylýan konfigurasiýasy

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 Uzakdaky 'jku/x5u' -dan ýüz öwürmek

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

11. 3 Synlaryň sanawynyň mysaly (Redis)

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

12) Gözegçilik we forensika

Метрики: `jwt_verify_fail_total{reason}`, `jwt_expired_total`, `jwks_refresh_total`, доля `kid`.
Loglar (gurluş): 'iss/aud/sub/kid/jti/exp/tenant/trace _ id', şowsuzlygyň sebäbi.
Daşbordlar: "ýakyn wagtda gutarýar", walidasiýa ýalňyşlyklarynyň köpelmegi, sebitler/müşderiler boýunça paýlanyş.
Alertler: 'verify _ fail' (gol/algoritm), JWKS ýalňyşlyklary, möhleti geçen tokenleriň paýy.

13) Antipatternler

Belgiden 'alg' -e ynanmak; 'none' -ni saklaň.
Uzak ömürli access-tokenler we refresh-rotasiýa ýoklugy.
KMS-siz ENV-de gysga syrly/syrly HS256.
Islendik domenden 'jku/x5u' kabul et; JWKS-i allow-listsiz dinamiki ýükläň.
PII/syrlary JWS tölegine salyň.
XSS töwekgelçiligi bar bolsa, 'localStorage' -de bellikleri saklamak.
Tassyklama hatalaryny öçürmek ("soft error" -dan 200 yzyna gaýtarmak).
BOLA barlaglarynyň ýoklugy we diňe 'scope/role' bil baglamak.

14) iGaming/Maliýe aýratynlyklary

Bellikler: 'kyc _ level', 'risk _ tier', 'tenant', berk 'aud'.
Write amallary üçin gysga TTL (goýumlar/netijeler), möhüm ugurlar üçin PoP/DPoP ýa-da mTLS.
Düzgünleşdiriji audit: girişleriň/şowsuzlyklaryň üýtgemeýän žurnallary, region çäklerinde ýazgylaryň saklanylmagy.
Hyzmatdaşlarda/PSP-de aýratyn açarlar/' aud ', per-tenant açarlary we aýratyn JWKS bar.

15) Prod-taýynlyk çek-sanawy

  • Gaty allow-list algoritmleri; 'none' gadagan.
  • 'iss/aud/exp/nbf/iat/jti' barlanýar; gysga 'exp'.
  • JWKS bilen örtük, gysga TTL nagt; kid paýlarynyň gözegçiligi.
  • Refresh — rotate-on-use; TTL bilen 'jti/sid' sanawlary; synlaryň oýun bukjasy.
  • Kritik ugurlarda PoP/DPoP ýa-da mTLS.
  • Brauzer üçin HttpOnly-cookies, CSP/Trusted Types vs XSS; CSRF goragy.
  • PII-siz payload; iň az bellik toplumy.
  • Tassyklamak we ret etmek boýunça metrikler/ýazgylar; alertler JWKS/verify_fail.
  • Negatiw ssenariýalaryň synaglary: RS → HS swap, 'kid' inýeksiýa, 'jku' spoofing, oversize, clock-skew.

16) TL; DR

Algoritmiňizi we açarlaryňyzy serweriň gapdalynda goýuň, bellikden 'alg' -a ynanmaň, 'iss/aud/exp/nbf/iat/jti' -ni talap ediň. Açarlary JWKS arkaly örtük bilen öwrüň, bellikleri gysga ömürli, refresh bolsa bir gezek ulanmaly. Bellikleri howpsuz saklaň (Web üçin HttpOnly-cookie), bellikleri azaldyň, PII goýmaň. 'jku/x5u/kid' -wektorlary ýapyň, gowşak syrly HS256 gaça duruň, möhüm ýollarda PoP/DPoP ýa-da mTLS goşuň we hemişe çeşme derejesi üçin BOLA barlaglaryny geçiriň.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.