Chiavi API, token e mandati di accesso: autenticazione sicura
Testo completo dell'articolo
1) Perché tutto questo, un modello di minacce per il iGaming
Soldi e PII, compromissione di una chiave, fuoriuscita, multe.
Integrazioni di rete: decine di provider esterni, regioni/licenze diverse.
Tassi SLA elevati: pagamenti semplici o filmati - rischi di reputazione e legali.
Output: l'autenticazione e l'autorizzazione devono essere «di default sicure», con privilegi minimi e una rigida osservabilità.
2) Strumenti: cosa abbiamo nell'arsenale
Chiavi API - ID client statici. Semplice integrazione, alto rischio di perdita.
OAuth2 (Client Credentials) - Token Bearer a breve vita con scope/audience.
mTLS: controllo TLS reciproco, forte collegamento del client al canale.
Firma HMAC/EdDSA: integrità crittografica del corpo della query e protezione da repliche (timestamp + nonce).
Proof-of-Position: MTLS-bound token o DPoP (firma richiesta HTTP con chiave client).
JWT/PASETO: token autoimprendibili (preferibilmente con TTL breve).
RBAC/ABAC: ruolo/attributo-bazed autorizzazioni (ORA/soluzioni di regole).
Autorizzazioni temporanee di accesso (delegation/STS): biglietti limitati in termini di tempo e scopo, rilasciati per uno specifico script.
3) Principi di base («caratteri di arresto»)
1. Least Privilege: ogni chiave/token ha i diritti minimi.
2. Short-lived by default: TTL minuti, non giorni. La rotazione è automatica.
3. Bind to channel - Il collegamento dei token al è inutile in caso di fuoriuscita.
4. Per-brand/region: chiavi/certificati e autorizzazioni - per marchio/licenza/regione.
5. No shared secret nel codice: i segreti sono solo tramite Vault/HSM/KMS o Git/Logs.
6. Controllo WORM - Login invariati di tutte le operazioni/erogazioni/rotazioni.
7. Idemotività su passaggi write: qualsiasi ripetizione con la stessa chiave non cambia il denaro per la seconda volta.
4) Quando utilizzare cosa (contesto iGaming)
5) Progettazione dei contratti di accesso (scopes, udienza, condizioni)
Scope-a (esempi):- `bets:write`, `settlements:write`, `wallet:credit`, `wallet:debit`, `rg:read`, `rg:enforce`, `jackpot:trigger`.
Audience - A chi viene indirizzato il token (ad esempio, 'aud: wallet. api`).
Constraints (fine-grained):- `brand_id`, `region`, `ip/cidr`, `time_of_day`, `rate_limit`, `max_amount`.
- Memorizzati in un token (JWT clims) o in un mandato estratto in Vault/STS.
6) Flow di riferimento
6. 1 Piattaforma RGS: denaro RPC
1. mTLS handshake (certificati per brand/region).
2. OAuth2 CC: RGS riceve «access _ token» (TTL 2-5 min, 'aud = wallet. api`, `scope=bets:write settlements:write`).
3. Query «POST/v1/bets/authorize» con titoli:- `Authorization: Bearer `, `X-Idempotency-Key`, `X-Trace-Id`. 
- 4. Risposta + scrittura in un controllo WORM (chi/cosa/quando/da dove).
- 5. La rotazione del token è silenziosa, al termine di una ripetizione CC.
6. 2 Webhookee piattaforma → provider
Titolo «X-Firma: eddsa = 
Il provider controlla la finestra di validità (© 5 min), l'usa e getta «nonce», la firma del corpo.
In caso di indisponibilità, retrai c backoff, dedotto dì event _ id ".
6. 3 Delega (servizio jackpot portafoglio)
JP chiama STS: «Dammi un tocco temporaneo su» wallet: credit «per» player _ id = p _... «, importo ≤ X, TTL 2 min».
La STS controlla criteri/limiti e rilascia un mandato (un tocco stretto).
La JP presta il portafoglio con quel token. Compromettere un tocco del genere non ha senso, TTL breve, diritti stretti, aggancio al mTLS.
7) Progetti di query
7. 1 Idempotenza (obbligatoria)
POST /v1/bets/settle
Authorization: Bearer <MTLS-bound>
X-Idempotency-Key: settle_r_8c12_1
X-Trace-Id: tr_a1b2
{
"bet_id":"b_001",  "round_id":"r_8c12",  "win":{"amount":1460,"currency":"EUR"}
}
→ 200 { "status":"credited", "settlement_id":"st_77" }
(ripetizione con la stessa chiave per la stessa risposta)7. 2 Firma webhook (HMAC)
X-Signature: sha256=BASE64(HMAC(secret, timestamp + "." + nonce + "." + body))
X-Timestamp: 1730000000
X-Nonce: 1f7a...8) Gestione dei segreti e delle chiavi
Vault/HSM/KMS: generazione, memorizzazione, rotazione, recensione.
Sandbox/prod - diverse radici di fiducia.
Per marca/regione: chiavi e certificati separati.
Rotazione automatica: cron/avvisi; periodi overlap per le sostituzioni silenziose.
Proibizione codice/login: i segreti non vengono scritti in stdout, non entrano nei reperti crash.
Device/Workload identity: SPIFFE/SPIRE, K8s senza segreti manuali.
9) Criteri di autorizzazione (RBAC/ABAC) e OPA
RBAC: роли «rgs», «wallet», «jackpot», «reporting».
ABAC: regole per "se" region = EU "e" brand = A "autorizzare" wallet: credit's 10k ".
OPA/REGO o analoghi: decisione centralizzata, versioning delle regole, test secchi.
10) Osservazione e verifica
«trace _ id» e «client _ id» completi in ogni query/evento.
Metriche: p50/p95/p99 latency per endpoint, errato-rate per codici ('AUTH _ FAILED', 'SCOPE _ DENIED', 'IDEMPOTENCY _ MISMATCH'), frequenza di rotazione, percentuale di token scaduti
Registro WORM: rilascio/recensioni dei token, cambio delle chiavi, modifica dei criteri.
Alert: picco «AUTH _ FAILED», anomalie geo/ASN, crescita «scaduta/ritirata»> soglia.
11) Residenza e segmentazione regionale
I token/certificati sono collegati alla regione (EU/UK/BR/...).
Con il marchio «region», i gateway di piattaforma vietano le chiamate regionali crociate.
KMS separati e cluster Vault per regione le chiavi non sono «guidate» tra le regioni.
12) Incidenti e recensione
Compromise playbook: revoke istantaneo chiavi/token, blocco di rete/ASN, chiusura scope.
Kill-switch a livello gateway: «no new sessions/funds».
Postmortem: «Come è finito il login/repository», «perché non ha funzionato il DLP/scanner di segreti».
13) Assegno fogli
A. Per la piattaforma
- Tutti i percorsi write sono + OAuth2 CC (TTL 5 min), X-Idempotency-Key, X-Trace-Id.
- Webhook: HMAC/EdDSA + timestamp + nonce, deadup per «event _ id».
- Kaystore: Vault/HSM/KMS, rotazione e recensione, separazione per brand/region.
- ORA/regole: RBAC/ABAC, registri delle modifiche, test.
- Controllo WORM e SLO-Dashboard (latency, errore, revoke/rotate).
- DR./xaoc - Token rigonfiati, scambi di firma, MITM senza mTLS.
B. Per il provider (RGS/live/JP)
- Non tengo segreti nel codice; utilizza Vault/sostituzione tramite variabili di ambiente.
- Rotazione automatica dei token; handle 401/403 con aggiornamento.
- Firmo webhook/controllo finestre di validità e usa e getta.
- Controllo le azioni chiave e rispondo a Deprecation/Sunset intestazioni.
- Idampotenza su tutte le chiamate write, deadlop'Idempotency-Key '.
14) Anti-pattern (bandiere rosse)
Chiavi API statiche senza data di scadenza in vendita.
I token Bearer non sono collegati al canale (nessun MTLS/DPoP).
Memorizzazione dei segreti nel Git/CI/Configh Frontend.
Chiave/certificato condivisi per più marchi/regioni.
Webhook senza firma e finestra temporale della replica.
Nessun richiamo centralizzato o registro WORM.
La mancanza di idepotenza è una ripresa di debiti/crediti.
15) Mini modelli di criterio (esempio, umano)
Mandato «rgs→wallet» (EU, brand A):- `aud=wallet. api`, `scope=["bets:write","settlements:write"]`
- `constraints: region=EU, brand=A, ip in {asn:…}, max_amount=5000 EUR, ttl=300s`
- `binding: mTLS(cert_hash=sha256:…)`
- "alg = Ed25519", finestra "© 300s", "nonce" è univoco, dedup'event _ id "24 ore.
L'autenticazione sicura nel iGaming è una combinazione di procedure: mandati a breve durata, collegamento al canale (mTLS/DPoP), scope/udienze strette, idemotia rigorosa, Vault/HSM e controllo WORM, segmentazione e osservazione regionale. Questa pila non interferisce con la velocità di integrazione, ma riduce drasticamente il rischio di fuoriuscite e incidenti finanziari - denaro e dati rimangono sotto controllo, gli upgrade passano prevedibilmente e la compilazione viene eseguita «dalla scatola».
