API autentifikatsiyasi: OAuth2, JWT, HMAC
TL; DR
OAuth2/OIDC + JWT - murakkab avtorizatsiya (scopes/roles/tenants), SSO va qisqa TTL tokenlari bilan mijoz ilovalari va server integratsiyalari uchun standart.
HMAC imzolari - vebxuklar va oddiy sheriklik qo’ng’iroqlari uchun eng yaxshi tanlov.
Xavfsizlikni kuchaytiring: mTLS yoki DPoP (sender-constrained tokens), qisqa TTL (5-15 min), kalitlar rotatsiyasi (JWKS), rotatsiyali refresh tokenlar/anti-reuse, qat’iy validatsiya’aud/iss/exp/nbf/kid’i policy-as-code on gateway.
1) Qarorlar xaritasi: nimani qayerda qo’llash kerak
2) OAuth2/OIDC: oqim va mijozlar
2. 1 Oqimlar
Authorization Code + PKCE (Web/Mobile): avtorizatsiya kodini ushlab qolishdan himoya qiladi.
Client Credentials: foydalanuvchisiz server; scopes - minimal zarur.
Device Code: brauzersiz qurilmalar uchun.
Refresh Token: faqat ishonchli mijozlar uchun; reuse detection.
2. 2 Mijoz turlari
Confidential (serverlar, BFF): sirlarni saqlash; mTLS’dan foydalaning.
Public (SPA/mobile): sirni saqlash mumkin emas → PKCE, DPoP, qisqa TTL va cheklangan skopes.
3) JWT: tuzilmasi, muddatlari, verifikatsiyasi
3. 1 Maydonlar (claims)
Majburiy:’iss’,’sub’,’aud’,’exp’,’iat’,’nbf’,’jti’,’scope ’/’ permissions’,’tenant’(agar multi-ijara boʻlsa),’kid’.
3. 2 Umr ko’rish muddatlari
Access token: 5-15 daqiqa.
Refresh token: kunlar/haftalar, har bir almashinuvda rotatsiya qilamiz; eskisini qayta topshirganda - sessiyani bloklaymiz.
Clock skew: ruxsat ≤ 60 sek.
3. 3 JWKS va kalitlar
Kalitlar KMS/Vault,’kid’da saqlanishi shart.
Ikkita aktiv kalit (rolling), 60-90 kunda yoki hodisada qayta chiqariladi.
JWKS kesh gateway ≤ 5 daqiqa, avto nogironlik bilan.
3. 4 Gateway/servislarda verifikatsiya qilish
Solishtiring: imzo,’aud’(ruxsat etilgan servislar),’iss’,’exp/nbf’, blokirovkalar roʻyxati (revocation).
Imzoni tekshirmasdan tana maydonlariga ishonmang; ’alg = none’ ga eʼtibor bermang.
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
4) Tokenni mijozga bog’lash: mTLS, DPoP
mTLS (TLS mijoz sertifikatlari): token faqat mijoz sertifikati mavjud bo’lganda beriladi va tasdiqlanadi → token «kalit + sertifikat» bog’lamasidan tashqarida foydasiz.
DPoP (Demonstration of Proof-of-Possession): mijoz har bir so’rovni bir martalik kalit bilan imzolaydi → ommaviy mijozlarda replay va tokenni o’g "irlashdan himoya qiladi.
Tanqidiy yo’nalishlar uchun (to’lov mutatsiyalari) - mexanizmlardan birini talab qilish.
5) Avtorizatsiya: scopes, roles, ABAC
Scopes - minimal harakatlar (’payments: write’,’payouts: status: read’).
Roles - ma’murlar uchun agregatlar; ularni scopessiz toʻgʻridan-toʻgʻri ishlatmang.
ABAC - tokendagi atributlar (’tenant’,’country’,’kyc _ level’,’risk _ flags’) → gateway/OPA siyosati.
Yo’nalish/maydon darajasida (GraphQL) va domen operatsiyasi darajasida (REST/gRPC) siyosat.
6) HMAC-imzolar: vebxuklar va sheriklar
6. 1 Konsepsiya
Har bir integratsiyaning oʻziga xos siri bor.
Kanonik satr ustidagi imzo: ’timestamp + «\n »+ method + «\n» + path + «\n »+ sha256 (body) ’
Sarlavhalar:
X-Signature: v1=base64(hmac_sha256(secret, canonical_string))
X-Timestamp: 2025-11-03T12:34:56Z
X-Event-Id: 01HF...
Vaqt oynasi: ≤ 300 sek; muddati o’tgan/kelajakdagi’X-Timestamp’so’rovlari rad etilsin.
Idempotentlik:’X-Event-Id’ni TTLda saqlang (24 soat) - dublikatlarni tashlang.
6. 2 Eng yaxshi amaliyotlar
KMS/Vault sirlari, har 90 kunda rotatsiya.
Ommaviy mijozlar uchun HMAC mos kelmaydi (sir qochadi); OAuth2/DPoP foydalaning.
7) Replay, brute force va sizib chiqishdan himoya qilish
sezgir operatsiyalar uchun Nonce/’ jti’; foydalanilgan identifikatorlarning qora roʻyxati.
Rate/quotas: kalit/mijoz/tenant/yo’nalish bo’yicha; «qimmat» operatsiyalar - alohida kvotalar.
Sheriklar va vebxuklar uchun IP/ASN/Geo allow-lists.
Content-type allow (’application/json’), tana oʻlchami chegarasi.
PIIni loglarda yashirish; token/sirlarni yozib olish taqiqlanadi.
8) Xato va javoblar (yagona format)
Xato tuzilishi:json
{
"error": "invalid_token",
"error_description": "expired",
"trace_id": "4e3f-..."
}
Maqomi:
- ’401’ - yo’q/nevalid token (WWW-Authenticate).
- ’403’ - yetarli huquqlar (scope/ABAC).
- ’429’ - limitlar/kvotalar.
- gRPC: `UNAUTHENTICATED`/`PERMISSION_DENIED`/`RESOURCE_EXHAUSTED`.
9) Muddatlar va sessiyalar siyosati
Access ≤ 15 min; Refresh - rotatsiya + reuse detection (eskisini taqdim etgan - sessiya sharhi).
Vebxuki HMAC: TTL imzo ≤ 5 daqiqa; eksponensial backoff bilan qayta yetkazib berish.
Sessiya/kalitni chaqirib olish → darhol revocation list-ga kirish (gateway’dagi kesh ≤ 1 daqiqa).
10) Kuzatuv va audit
’trace _ id ’/’ span _ id’ bilan bogʻlanish.
Metriklar: auth success rate,’401/403/429’, OIDC/JWKS latentligi, rotatsiya chastotasi, reuse refresh, DPoP/mTLS trafik ulushi.
Audit-log: «kim, qachon, qanday’sub/tenant/scope’nima chaqirgan», kalitlar/sirlarning o’zgarishi, HMACning muvaffaqiyatsiz imzolari.
11) Gateway APIga integratsiya qilish
JWT-validatsiya (JWKS kesh) va shlyuzda OPA/ABAC.
mTLS ishonchli mijozlar/hamkorlar uchun profillar.
HMAC - vebxuklarni edge orqali tekshirish (ichki xizmatlargacha).
Rate/Quota siyosati, OIDC-provayderga circuit-breaker (JWKni keshlash).
Feature-flags: mijoz/kalitni tezda oʻchirish, imzo algoritmini oʻzgartirish.
12) Mini-snippetlar
Psevdo: JWT verifikatsiyasi
pseudo jwks = cache. getOrFetch(iss + "/.well-known/jwks. json")
key = jwks[kid]
assert verify_signature(jwt, key)
assert aud in ALLOWED_AUDIENCES and iss in TRUSTED_ISSUERS assert now in [nbf-60s, exp+60s]
Psevdo: HMAC vebxukni tekshirish
pseudo canonical = timestamp + "\n" + method + "\n" + path + "\n" + sha256(body)
sig = base64(hmac_sha256(secret, canonical))
assert abs(now - timestamp) <= 300 assert not seen(event_id)
assert timingSafeEqual(sig, header["X-Signature"].split("v1=")[1])
markSeen(event_id, ttl=86400)
Scope-siyosat misoli (OPA/Rego g’oya)
rego allow {
input. jwt. scope[_] == "payments:write"
input. jwt. tenant == input. route. tenant
}
13) Hodisalar pleybuklari
Shaxsiy kalitning/JWT obunachisining chiqib ketishi: kalitlarni qayta chiqarish, JWKSni yangilash, eskisini darhol oʻchirish (’kid’→ deny), refresh nogironligi, majburiy logout.
Vebxuklarni almashtirish: sirlarni almashtirish, IP allow-list, «X-Timestamp» oynasini kuchaytirish, o’tkazib yuborilgan voqealarni qayta yetkazish.
Replay/brutfors: kritik yo’nalishlarda DPoP/mTLS, kvotalarning torayishi, IP/ASN bo’yicha vaqtinchalik bloklar,’jti’-bloklist.
Outage OIDC: keshlangan tokenlarning degradatsiyasi (grace), provayderning circuit-breaker, mijozlarni xabardor qilish.
14) Joriy etish chek-varaqalari
Autentifikatsiya (minimal):- OAuth2: Code+PKCE (Web/Mobile), Client Credentials (server-to-server)
- TTL: Access ≤ 15 min, Refresh rotatsiya va reuse detection
- JWKS: ikkita aktiv kalit,’kid’, kesh ≤ 5 daqiqa
- Vebxuklar: HMAC v1,’X-Timestamp’,’X-Event-Id’, deraza ≤ 300 sek, idempotentlik
- Sender-constrained: mTLS/DPoP kritik yo’nalishlarda
- ABAC/OPA: shlyuz siyosatida scopes + tenant/risk
- Rate/Quota и 429; Sheriklar uchun IP/ASN allow-lists
- Audit va (401/403/429 alertlari, reuse refresh, HMAC imzolari)
- Tokenlarni/sirlarni/xaritalarning to’liq tanalarini logotip qilmaslik
- PII niqoblash; DSARni qo’llab-quvvatlash; saqlash muddati cheklangan
15) Anti-patternlar
’alg = none’ yoki imzoni tekshirmasdan tokenga ishonish/JWKS.
Uzoq umr ko’radigan access-tokenlar (soat/sutka).
Barcha sheriklar uchun bitta umumiy HMAC-sir.
Taymshtampsiz/idempotentsiz vebxuklar.
Refresh-tokenlar rotatsiyasiz va reuse detection.
’aud ’/’ iss’ -validatsiya va’kid’-rotatsiya yo’qligi.
Maxfiylarni KMS/Vault’siz muhit oʻzgaruvchisida saqlash.
16) NFT/SLO (mo’ljallar)
OIDC/JWKS foydalanish imkoniyati ≥ 99. 95% (edge-kesh qaramlikni kamaytiradi).
JWT validatsiya qo’shimcha gateway ≤ 2-5 ms p95.
Autentifikatsiya xatosi (’401’) ≤ 0. umumiy trafikning 5 foizi (botlar hisobga olinmagan holda).
Imzolangan vebxuklar: muvaffaqiyatli tekshirilgan ≥ ulushi 99. 9%, yetkazib berishning o’rtacha kechikishi ≤ 3 sn.
Xulosa
OAuth2/OIDC + JWT foydalanuvchilar va boy server stsenariylari uchun, HMAC vebxuk/oddiy hamkorlar uchun va tanqidiy operatsiyalar uchun mTLS/DPoP mexanizmlarini birlashtiring. Qisqa TTLlarni, kalitlar rotatsiyalarini (JWKS), ABAC/OPA qat’iy siyosatlarini saqlang, konturlarni replay va sizib chiqishlardan himoya qiling va hamma narsani Gateway API darajasida avtomatlashtiring. Shunday qilib, autentifikatsiya UX va monetizatsiya uchun murosasiz, oldindan aytib bo’ladigan, miqyosli va xavfsiz bo’ladi.