Chei API, jetoane și acreditări - Autentificare securizată
Articol complet
1) De ce toate acestea: modelul de amenințare pentru iGaming
Bani și PII: compromis cheie → fraudă, scurgeri de informații, amenzi.
Integrări de rețea: zeci de furnizori externi, diferite regiuni/licențe.
Rate SLA ridicate: plată simplă sau dublă - riscuri reputaționale și juridice.
Concluzie: autentificarea și autorizarea ar trebui să fie „sigure în mod implicit”, cu privilegii minime și observabilitate strictă.
2) Instrumente: Ce avem în arsenalul nostru
Chei API: ID-uri statice de client. Integrare ușoară, risc ridicat de scurgeri.
OAuth2 (Client Acreditări): jetoane Purtător de scurtă durată cu scop/audiență.
mTLS: verificare TLS reciprocă, legarea puternică a clientului de canal.
Semnături HMAC/EdDSA: integritatea criptografică a organismului de solicitare și protecția împotriva reluărilor (timestamp + nonce).
Dovada posesiei: jetoane legate de MTLS sau DPoP (semnarea cererii HTTP cu cheia clientului).
JWT/PASETO: token-uri auto-descriptive (de preferință, cu un TTL scurt).
RBAC/ABAC: autorizare pe bază de rol/atribut (OPA/decizii de politică).
Delegare/STS: Timp și bilete cu destinație limitată emise pentru un anumit scenariu.
3) Principii de bază („semne de oprire”)
1. Cel mai mic privilegiu: fiecare cheie/token are cele mai mici drepturi posibile.
2. De scurtă durată în mod implicit: minute TTL, nu zile. Rotaţia este automată.
3. Legați la canal: jetoanele obligatorii la mTLS/DPoP → sunt inutile atunci când sunt scurgeri.
4. Per brand/regiune: chei/certificate si permisiuni - pentru marca/licenta/regiune.
5. Nu există secrete comune în cod: secrete numai prin Vault/HSM/KMS, nici în Git/jurnale.
6. Audit WORM: jurnale neschimbătoare ale tuturor operațiunilor/problemelor/rotațiilor.
7. Idempotence pe scrie-pune: orice repetare cu aceeași cheie nu schimbă bani a doua oară.
4) Când să utilizați ceea ce (context iGaming)
5) Proiectarea biletelor de acces (scopuri, audiență, condiții)
Domeniul de aplicare (exemple):- 'bets: write', 'settlements: write', 'wallet: credit', 'wallet: debit', 'rg: read', 'rg: enforce', 'jackpot: trigger'.
Publicul: cui i se adresează jetonul (de exemplu, "aud: portofel. api ').
Constrângeri (granulație fină):- 'brand _ id',' region ',' ip/cidr ',' time _ of _ day ',' rate _ limit ',' max _ sound '.
- Stocate într-un token (revendicări JWT) sau într-un „mandat” scris în Vault/STS.
6) Fluxul de referință
6. 1 RGS Platforma ⇄: RPC Bani
1. mTLS strângere de mână (pe certificate de marcă/regiune).
2. OAuth2 CC: RGS primește 'access _ token' (TTL 2-5 min, 'aud = portofel. api ',' scope = pariuri: scrie așezări: scrie ').
3. Cerere 'POST/v1/pariuri/autorizare' cu anteturi:- 'Autorizaţie: Purtător ', 'X-Idempotency-Key', 'X-Trace-Id'. 
- 4. Răspunde + scrie la auditul WORM (cine/ce/când/unde).
- 5. Rotația jetonului este fără sudură, după expirare - CC se repetă.
6. 2 Furnizor de → pentru platformă Webhooks
Rubrica 'X-Signature: eddsa = 
Verificarea furnizorului: fereastră de valabilitate (± 5 min), nonce, semnătură corporală.
Dacă nu este disponibil - retrăi cu backoff, dedup prin 'event _ id'.
6. 3 Delegație (serviciu jackpot → portofel)
JP apelează STS: „dă un token temporar pe 'portofel: credit' pentru 'player _ id = p _...', sumă ≤ X, TTL 2 min”.
STS verifică politica/limitele → emite un bilet (token îngust).
JP creditează un portofel cu acest token. Este inutil să se compromită un astfel de token: TTL scurt, drepturi înguste, obligatorii pentru mTLS.
7) Constructe de interogare
7. 1 Idempotență (necesar)
POST/v1/pariuri/soluționare
Autorizatie: Purtator <MTLS-bound>
X-Idempotency-cheie: settle_r_8c12_1
X-Trace-Id: tr_a1b2
{
„bet_id":"b_001,” „round_id":"r_8c12,” „câștig „: {„sumă „: 1460” monedă”:” EUR”}
}
→ 200 {„stare „: „creditat”, „settlement_id":"st_77”}
(repetați cu aceeași cheie → același răspuns)7. 2 Semnătură broşură web (HMAC)
X-Signature: sha256 = BASE64 (HMAC (secret, timestamp + „.” + nonce + „.” + corp)
X-Timestamp: 1730000000
X-Nonce: 1f7a...8) Gestionați secretele și cheile
Vault/HSM/KMS: generare, stocare, rotire, rechemare.
Per-mediu: sandbox/prod - rădăcini diferite de încredere.
Per brand/regiune: chei și certificate individuale.
Auto-rotație: cron/alerte; suprapunerea perioadelor pentru înlocuiri fără sudură.
Interzicerea în cod/jurnale: secretele nu sunt scrise la stdout, nu intră în rapoarte de accident.
Dispozitiv/Identitate volum de lucru: SPIFFE/SPIRE, K8s ServiceAccount → mTLS fără secrete manuale.
9) Politici de autorizare (RBAC/ABAC) și OPA
RBAC: роли "rgs'," portofel "," jackpot "," raportare ".
ABAC: „if 'region = EU' and 'brand = A' norme → allow 'wallet: credit' ≤ 10k”.
OPA/REGO sau analogi: luarea deciziilor centralizate, versionarea politicilor, teste uscate.
10) Observabilitate și audit
End-to-end trace _ id și client _ id în fiecare cerere/eveniment.
Valori: p50/p95/p99 latență după endpoints, errate-rate după coduri ('AUTH _ FAILED', 'SCOPE _ NEGED', 'IDEMPOTENCY _ MISMATCH'), rata de rotație, cota de jetoane expirate.
Jurnalul WORM: probleme/rechemări token, modificări cheie, modificări de politică.
Alerte: „AUTH _ FAILED” spike, geo/ASN anomalii, „restante/retrase” creștere> prag.
11) Rezidență regională și segmentare
Jetoanele/certificatele sunt specifice regiunii (EU/UK/BR/...).
În branduri - „regiune”, gateway-urile platformei interzic apelurile transregionale.
clustere separate KMS și Vault pe regiune; cheile nu „conduce” între regiuni.
12) Incidente și rechemări
Compromise playbook: revocarea instantanee a cheii/tokenului, blocarea rețelei/ASN, închiderea domeniului de aplicare.
Kill-switch la nivel de gateway: „fără sesiuni/fonduri noi”.
Postmortem: „așa cum a ajuns în jurnalele/depozit”, „de ce DLP/scanner secret nu a funcționat”.
13) Liste de verificare
A. Pentru platformă
- Toate căile de scriere: mTLS + OAuth2 CC (TTL ≤ 5 min), 'X-Idempotency-Key', 'X-Trace-Id'.
- Webhooks: HMAC/EdDSA + timestamp + nonce, dedup by 'event _ id'.
- Keistor: Vault/HSM/KMS, rotație și rechemare, împărțit pe marcă/regiune.
- OPA/politici: RBAC/ABAC, jurnalele de schimbare, teste.
- Audit WORM și tablouri de bord SLO (latență, eroare, revocare/rotire).
- Învățături DR/xaoc: token-uri expirate, semnătură spoofing, MITM fără mTLS.
B. Pentru furnizor (RGS/live/JP)
- Nu păstrez secrete în cod; folosind Vault/substituție prin variabile de mediu.
- Rotirea automată a jetoanelor; mâner 401/403 cu actualizare.
- Semnați webhooks/verificați ferestrele de valabilitate și de unică folosință.
- Audit activități cheie și să răspundă la titluri depreciere/apus de soare.
- Idempotency pe toate apelurile de scriere, dedup de 'Idempotency-Key'.
14) Anti-modele (steaguri roșii)
Chei API statice fără data de expirare în vânzări.
Jetoane purtător fără legare la canal (fără MTLS/DPoP).
Stocarea secretelor în Git/CI log/frontend config.
Cheie/certificat partajat pentru mai multe mărci/regiuni.
Webhooks fără o semnătură și o fereastră de timp → reluare.
Lipsa feedback-ului centralizat și a jurnalului WORM.
Lipsa idempotenței → a debitelor/creditelor duplicate.
15) Mini șabloane de politică (exemplu, lizibil uman)
Biletul „rgs→wallet” (EU, marca A):- 'aud = portofel. api ',' scope = ["pariuri: scrie", "așezări: scrie"] "
- 'constricts: region = EU, brand = A, ip in {asn:...}, max_amount=5000 EUR, ttl = 300s'
- „legare: mTLS (cert_hash=sha256:...)”
- 'alg = Ed25519', fereastră '± 30', 'nonce' unic, bunicul 'eveniment _ id' 24 ore.
Autentificarea securizată în iGaming este o combinație de practici: mandate de scurtă durată, legarea canalelor (mTLS/DPoP), domeniul restrâns/audiență, idempotența strictă, auditul Vault/HSM și WORM, segmentarea regională și observabilitatea. O astfel de stivă nu interferează cu viteza de integrare, dar reduce radical riscul de scurgeri și incidente financiare - banii și datele rămân sub control, upgrade-urile sunt previzibile, iar conformitatea este efectuată din cutie.
