OAuth2/OpenID Birikdirmek
OIDC OAuth2 üstünde "ulanyjynyň kimdigini" subut etmegiň we API-e gysga ömürli elýeterliligi bermegiň adaty usulydyr. Platformanyň özeninde merkezi ukyba öwrülýär: müşderiler, operatorlar we hyzmatlar üçin ýeke-täk giriş; iň az artykmaçlyklar; ölçelip bolýan töwekgelçilik; sebitleýin we ygtyýarnama düzgünleriniň berjaý edilmegi.
1) Maksatlar we ýörelgeler
Bölmek "deploy vs enable": Kody aýratyn çykarýarys, baýdaklar/syýasatlar arkaly elýeterliligi açýarys.
Gysga ömürli bellikler + howpsuz täzelenme: syzdyrylanda zyýany azaldýarys.
Multi-tenant/region: ähli artefaktlar 'tenant/region/licence'.
Bellikleriň üstündäki syýasatlar: çözgütleri PDP (RBAC/ABAC), PEP gateway/hyzmatlarda edýär.
Kanallary goramak: TLS1. 2 +, mümkin boldugyça mTLS/DPoP, berk CORS/CSRF.
Gözegçilik we audit: akym, müşderi, sebit boýunça görünmek.
2) Akymlar we olary haçan ulanmak
Authorization Code + PKCE (SPA/Mobile/Web) - ulanyjy loginleri üçin defolt.
Device Authorization (konsollar/TV/CLI) - brauzer ýok wagty.
Client Credentials (machine-to-machine) - ulanyjysyz hyzmat integrasiýasy.
Token Exchange (RFC 8693, OBO) - hyzmat ulanyjynyň adyndan hereket edýär.
CIBA/Back-channel (islege görä) - redaktorsyz push-autentifikasiýa.
- PAR (Pushed Authorization Requests) - ygtyýarnamanyň parametrleri ygtybarly serwer kanaly arkaly iberilýär.
- JAR (JWT Secured Authorization) - haýyşnamanyň parametrleri gol çekildi/şifrlendi.
- JARM - çalyşmalara çydamly, ygtybarly ygtyýarnama jogaby (JWT).
- RAR (Rich Authorization Requests) - elýeterli hukuklara baý haýyşlar (jikme-jik rugsatlar).
3) Bellikler we markalar
Görnüşleri:- ID Token (OIDC) - girenler (diňe müşderä/fronta görkeziň).
- Access Token (AT) - hereket etmek hukugy (gysga ömür).
- Refresh Token (RT) - AT täzelenýär; diňe ynanylan gurşawda saklanylýar.
- AT: 5-15 min (web/mobile), 2-5 min (service-to-service).
- RT: 7–30 дней (web/mobile) с rotation + reuse detection.
- ID: ≤ 5 minut.
json
{
"iss":"https://auth. core",
"sub":"user_42",
"aud":["wallet","catalog"],
"exp":1730388600,"iat":1730388000,
"tenant":"brand_eu","region":"EE","licence":"EE-A1",
"scp":["wallet:read","bets:place"], // scopes
"sid ": "sess _ abcd, ""amr": [" pwd,"" webauthn"] ,//login methods
"act":{"sub":"svc. catalog" }//if OBO
}
Gol çekiş: ES256/EdDSA, açyk açarlar - JWKS-de 'kid' we rotasiýa bilen.
4) Sessiýalaryň kontury we logout
Server-side session для web (cookie `SameSite=Lax/Strict`, `HttpOnly`, `Secure`).
Back-Channel Logout + Front-Channel Logout (OIDC) - ähli müşderileriň sinhron tamamlanmagy.
Step-Up MFA: duýgur hereketlerde - gaýtadan barlamak ('acr' ýokarlanýar).
Revocation & Introspection: Waka boýunça RT/AT-ny derrew öçürmek.
5) Müşderileriň howpsuzlygy
Web/SPAs: Authorization Code + PKCE, implicit ýok; berk CORS/Content-Security-Policy.
Mobile: ulgam brauzeri (AppAuth), bütewilik barlagy (App Attestation/DeviceCheck), RT goralýan ammar.
Desktop/CLI/TV: Device Flow; RT-ni OS-gizlin ammarlarda saklaň.
AT-ny enjam/birikdirmek üçin DPoP ýa-da mTLS-bound tokens.
6) Hyzmat-hyzmat
mTLS + gysga Service JWT (aud-skoped), KMS/HSM bilen STS berýär.
Workload şahsyýetleri: SPIFFE/SPIRE.
"Dar-giň" syýasaty: ýerine anyk audience we scopes ".
7) Skope-reýestr we razylyk (consent)
Ady: 'resurs: action' - 'wallet: read', 'wallet: transfer', 'bets: place', 'kyc: status. read`.
Skoplaryň görünmegini we duýgurlygyny sazlaň.
Consent screen RAR/Scopes-dan ýygnalýar; ylalaşyklaryň taryhyny saklaň we yzyna çagyrmaga rugsat beriň.
json
{
"type":"wallet. transfer",
"actions":["create"],
"locations":["https://api. core/wallet"],
"datatypes":["payment"],
"resources":[{"wallet_id":"w_123","currency":"EUR","amount_max":1000}]
}
8) Ygtyýarnama bilen integrasiýa (PDP/PEP)
API Gateway-de PEP AT/DPoP/mTLS tassyklaýar, konteksti baýlaşdyrýar (IP/ASN/region/tenant), PDP-e haýyş edýär.
PDP (OPA/cedar) RBAC/ABAC/ReBAC syýasatlaryny ulanýar we düşündiriş we TTL bilen 'ALLOW/DENY' -ni yzyna gaýtarýar.
PEP-de (TTL 30-120 s) wakalar boýunça maýyplyk bilen çözgütleriň keşi (rollaryň/düzgünleriň üýtgemegi).
9) Köp tenant we sebitler
Ähli bellikler we sessiýalar 'tenant/region/licence' bilen bellenilýär; PDP çeşmäniň laýyklygyny tassyklaýar.
Aýry-aýry JWKS/sebitler boýunça açarlar we yzyna çagyryş sanawlary; kross-sebit - ynanylan şlýuzlar arkaly.
Maglumatlaryň rezidentlik çäklendirmeleri: introspektsiýa/revokasiýa gelip çykan sebitinde ýerine ýetirilýär.
10) Teswirnamanyň güýçlendirilmegi
PAR + JAR + JARM - ygtyýarnamanyň parametrlerini we jogaplaryny goraýar.
Nonce/State/PKCE - ähli açyk müşderiler üçin.
"Pushed Device Authorization" (ýokary töwekgelçilikde).
Iň az bellikli JWT Access Tokens + içerki gözleg arkaly daşarky integrasiýa üçin opaque warianty.
FAPI-şuňa meňzeş amallar: berk gol algoritmleri, TLS/redirect_uri/PKCE talaplary.
11) Ýalňyşlyklar we yzyna gaýtarmak syýasaty
Jogaplary standartlaşdyryň:json
{ "error":"invalid_grant", "error_description":"refresh token reused", "error_code":"RT_REUSE" }
Критичные коды: `invalid_request`, `invalid_client`, `invalid_grant`, `invalid_scope`, `unauthorized_client`, `access_denied`, `temporarily_unavailable`.
Duýgur endpointler üçin rate-limit ('/token ', '/introspect', '/revoke '), eksponensial backoff.
12) Gözegçilik we audit
Metrikler:- `auth_code_success_rate`, `pkce_missing_rate`, `mfa_challenge/fail_rate`,
- `token_issuance_p95_ms`, `jwks_skew_ms`, `invalid_token_rate`, `rt_reuse_detected`,
- по API: `authz_p95_ms`, `deny_rate{reason}`, `dpop_mismatch_rate`, `mtls_fail_rate`.
Логи/трейсы: `client_id`, `grant_type`, `kid`, `acr/amr`, `tenant/region`, `decision`, `policy_version`, `aud`, `scp`, `sid`, `trace_id`.
Audit (üýtgemeýän): bellikleriň berilmegi, hukuklaryň güýçlenmegi, ylalaşyklaryň yzyna alynmagy, açarlaryň aýlanmagy.
13) Açarlary dolandyrmak we rotasiýa
JWT goly: KMS/HSM, JWKS-iň 'kid' bilen neşir edilmegi.
Dual-key period: IdP täzesine gol çekýär, inspektorlar geçmezden ozal köne + täzesini kabul edýärler.
Yzygiderli aýlanyş we gyssagly revoke; 'kid' sarp edilişine gözegçilik.
14) Oýun kitaplary (runbooks)
1. Gol açaryny bozmak
Derrew revoke 'kid', täze, RT/sessiýalaryň fors-maýyplygy, audit hasabatyny çykarmak.
2. Köpçülikleýin 'invalid _ token '/401
Döwülen AT, döwülen JWKS-kesh, sagatlaryň bölünişini barlamak; 'clock _ skew' toleransyny wagtlaýynça artdyrmak.
3. RT-ni gaýtadan ulanmak
Sessiýany bloklamak ('sid'), ulanyja habar bermek, täze giriş üçin step-up talap etmek, derňew.
4. IdP ýykylmagy
"read-only authorization" re modeimini açyň: hereket edýän AT-ny TTL-e çenli saklaň, täze loginleri çäklendiriň, içerki gözleg kesşini skelet ediň.
5. '/token '-e hüjüm
rate-limit/bot-süzgüçleri güýçlendirmek, duýgur müşderiler üçin mTLS/DPoP-leri açmak, "sowuk" RT-leri aýratyn segmente çykarmak.
15) Synag
Contract: OIDC discovery, JWKS, OpenID provider config.
Howpsuzlyk: PKCE/nonce/state hökmany; negative-toparlar ('redirect _ uri', reuse RT çalyşmalary).
Interoperability: müşderiler (web/mobile/CLI), dürli wagt guşaklary/lokallary.
Chaos: PAR/JARM-den ýüz öwürmek, JWKS-den gijä galmak, rotated 'kid' "uçuş".
E2E: step-up MFA, OBO (token exchange), logout (front/back-channel), revoke/rotate.
16) Konfigurasiýa mysallary
OIDC/Authorization Server (YAML bölegi):yaml issuer: https://auth. core jwks:
rotation_days: 30 alg: ES256 tokens:
access_ttl: 10m refresh_ttl: 14d id_ttl: 5m policies:
require_pkce: true require_par: true require_jarm: true dpop_enabled: true mfa_step_up:
actions: ["wallet:transfer","payout:initiate"]
tenancy:
include_claims: ["tenant","region","licence"]
jwks_per_region: true
Skope sanawy:
yaml scopes:
wallet: read: {desc: "Reading balance"}
wallet: transfer: {desc: "Transfer of funds," sensitive: true, step_up: true}
bets: place: {desc: "Betting"}
kyc:status. read: {desc: "KYC status"}
roles:
player: { allow: [bets:place] }
support: { allow: [wallet:read, kyc:status. read] }
finance: { allow: [wallet:read, wallet:transfer] }
17) Azyk önüminden öň çek-sanawy
- PKCE/nonce/state goşuldy; PAR/JAR/JARM işjeň.
- AT/RT/ID TTL berildi; RT rotation + reuse detection goşuldy.
- Duýgur müşderiler/amallar üçin DPoP ýa-da mTLS-binding.
- JWKS c `kid`; açarlaryň sarp edilmeginiň awtomatiki aýlanmagy we gözegçiligi.
- Konsent/RAR we satyn alyş sanawy; duýgur hereketler üçin step-up MFA.
- PDP/PEP integrirlenen, maýyplyk çözgütleriniň keşi.
- Tokenlarda 'tenant/region/licence' bar; residency berjaý edilýär.
- Syn edilişi: metrikler, loglar, yzarlama; alertalar 'invalid _ token', 'rt _ reuse', 'jwks _ skew'.
- Revoke/rotate/lockdown pleybuklary; gyssagly giriş düwmesi.
- E2E/chaos/interop synaglaryň toplumy stendlerde geçirildi.
Netije
Platforma güýji hökmünde OAuth2/OIDC gurup, öňünden aýdyp boljak ygtyýarnama akymlaryny, dolandyrylýan bellikleri, bitewi giriş syýasatlaryny we ölçenip bolýan töwekgelçiligi alarsyňyz. Gysga AT, RT goragly, açar aýlawy, PAR/JARM/DPoP, razylyk we step-up - bu howpsuzlygy, ewolýusiýany bolsa toparlary we hyzmatdaşlary üçin çalt we agyrysyz edýän amallar.