API-Schlüssel, Token und Zugriffsmandate: Sichere Authentifizierung
Vollständiger Artikel
1) Warum all dies: das Bedrohungsmodell für iGaming
Geld und PII: Schlüsselkompromittierung → Betrug, Lecks, Geldstrafen.
Netzwerkintegrationen: Dutzende externe Anbieter, verschiedene Regionen/Lizenzen.
Hohe SLA-Raten: einfache oder doppelte Zahlung - Reputations- und Rechtsrisiken.
Fazit: Authentifizierung und Autorisierung müssen „standardmäßig sicher“ sein, mit minimalen Privilegien und strenger Beobachtbarkeit.
2) Werkzeuge: Was wir im Arsenal haben
API-Schlüssel: Statische Client-IDs. Einfache Integration, hohes Risiko von Leckagen.
OAuth2 (Client Credentials): kurzlebige Bearer-Token mit Scope/Audience.
mTLS: gegenseitige TLS-Validierung, starke Kundenbindung an den Kanal.
HMAC/EdDSA Signaturen: kryptographische Integrität des Request Body und Schutz vor Replays (Timestamp + Nonce).
Proof-of-Possession: MTLS-gebundene Tokens oder DPoP (Signatur einer HTTP-Anfrage mit dem Client-Schlüssel).
JWT/PASETO: selbstbeschreibende Token (vorzugsweise mit kurzer TTL).
RBAC/ABAC: Rolle/Attribut-Based Authorization (OPA/Policy Solutions).
Temporäre Zugriffsmandate (Delegation/STS): zeitlich und zweckgebundene Tickets, die für ein bestimmtes Szenario ausgestellt werden.
3) Grundprinzipien („Stoppschilder“)
1. Least Privilege: Jeder Schlüssel/Token hat die geringstmöglichen Rechte.
2. Kurzlebig durch Standard: TTL in Minuten, nicht in Tagen. Die Rotation erfolgt automatisch.
3. Bind to Channel: Die Bindung von Token an mTLS/DPoP ist bei einem Leak → nutzlos.
4. Per-brand/region: Schlüssel/Zertifikate und Berechtigungen - pro Marke/Lizenz/Region.
5. Keine gemeinsamen Geheimnisse im Code: Geheimnisse nur über Vault/HSM/KMS, weder in Git/Logs.
6. WORM-Audit: unveränderliche Protokolle aller Operationen/Ausgaben/Rotationen.
7. Idempotenz auf Write-Puts: Jede Wiederholung mit demselben Schlüssel ändert das Geld nicht ein zweites Mal.
4) Wann man was benutzt (iGaming-Kontext)
5) Gestaltung der Zugriffsmandate (Scopes, Publikum, Bedingungen)
Scope-s (Beispiele):- `bets:write`, `settlements:write`, `wallet:credit`, `wallet:debit`, `rg:read`, `rg:enforce`, `jackpot:trigger`.
Audience: an wen das Token adressiert ist (z.B. 'aud: wallet. api`).
Constraints (fine-grained):- `brand_id`, `region`, `ip/cidr`, `time_of_day`, `rate_limit`, `max_amount`.
- Gespeichert im Token (JWT-Claims) oder im ausgestellten „Mandat“ in Vault/STS.
6) Benchmark-Flows
6. 1 ⇄ RGS-Plattform: Geld für RPC
1. mTLS handshake (Zertifikate pro Marke/Region).
2. OAuth2 CC: RGS erhält 'access _ token' (TTL 2-5 min, 'aud = wallet. api`, `scope=bets:write settlements:write`).
3. Anfrage' POST/v1/bets/authorize' mit den Überschriften:- `Authorization: Bearer `, `X-Idempotency-Key`, `X-Trace-Id`. 
- 4. Antwort + Eintrag in WORM-Audit (wer/was/wann/woher).
- 5. Die Rotation des Tokens ist nahtlos, nach Ablauf wird der CC wiederholt.
6. 2 Webhooks Plattform → Anbieter
Überschrift „X-Signatur: eddsa = 
Der Anbieter prüft: Gültigkeitsfenster (± 5 min), einmalige „Nonce“, Unterschrift des Körpers.
Wenn nicht verfügbar - retray c backoff, dedup by 'event _ id'.
6. 3 Delegation (Jackpot-Service → Wallet)
JP ruft STS auf: „Gib ein temporäres Token auf 'wallet: credit' für 'player _ id = p _...', Summe ≤ X, TTL 2 min“.
STS überprüft Richtlinien/Limits → erteilt ein Mandat (schmaler Token).
JP wird die Brieftasche mit diesem Token gutschreiben. Es ist sinnlos, ein solches Token zu kompromittieren: kurze TTL, enge Rechte, Bindung an mTLS.
7) Anfrageentwürfe
7. 1 Idempotenz (erforderlich)
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" }
(Wiederholung mit demselben Schlüssel → dieselbe Antwort)7. 2 Webhook-Signatur (HMAC)
X-Signature: sha256=BASE64(HMAC(secret, timestamp + "." + nonce + "." + body))
X-Timestamp: 1730000000
X-Nonce: 1f7a...8) Verwaltung von Geheimnissen und Schlüsseln
Vault/HSM/KMS: Erzeugung, Speicherung, Rotation, Rückruf.
Per-Umgebung: sandbox/prod - verschiedene Wurzeln des Vertrauens.
Per-Marke/Region: individuelle Schlüssel und Zertifikate.
Auto-Rotation: cron/Warnungen; Overlap-Perioden für nahtlose Substitutionen.
Verbot in Code/Logs: Geheimnisse werden nicht in stdout geschrieben, fallen nicht in Crash-Berichte.
Geräte-/Workload-Identität: SPIFFE/SPIRE, K8s ServiceAccount → mTLS ohne manuelle Geheimnisse.
9) Autorisierungsrichtlinien (RBAC/ABAC) und OPA
RBAC: роли «rgs», «wallet», «jackpot», «reporting».
ABAC: Regeln „wenn 'region = EU' und 'brand = A' → erlauben 'wallet: credit' ≤ 10k“.
OPA/REGO oder Analoga: zentralisierte Entscheidungsfindung, Versionierung von Richtlinien, trockene Tests.
10) Beobachtbarkeit und Audit
End-to-End 'trace _ id' und 'client _ id' in jeder Anforderung/jedem Ereignis.
Metriken: p50/p95/p99 Latenz durch Endpoints, Fehlerrate durch Codes ('AUTH _ FAILED', 'SCOPE _ DENIED', 'IDEMPOTENCY _ MISMATCH'), Rotationsfrequenz, Anteil abgelaufener Token.
WORM-Journal: Token-Ausgabe/Feedback, Schlüsseländerung, Richtlinienänderung.
Alertas: Anstieg 'AUTH _ FAILED', Anomalien durch Geo/ASN, Wachstum 'überfällig/zurückgezogen'> Schwelle.
11) Regionale Residency und Segmentierung
Token/Zertifikate sind an eine Region gebunden (EU/UK/BR/...).
In den Stempeln steht 'region', Plattform-Gateways verbieten regional übergreifende Anrufe.
Getrennte KMS und Vault-Cluster pro Region; Schlüssel „fahren“ nicht zwischen Regionen.
12) Vorfälle und Rückruf
Compromise playbook: sofortige revoke Schlüssel/Token, block-Netzwerke/ASN, schließen scope.
Kill-Switch auf Gateway-Ebene: „keine neuen Sessions/Fonds“.
Postmortem: „wie es in die Protokolle/Repository kam“, „warum DLP/Secret Scanner nicht funktionierte“.
13) Checklisten
A. Für die Plattform
- Alle Schreibpfade: mTLS + OAuth2 CC (TTL ≤ 5 min), 'X-Idempotency-Key', 'X-Trace-Id'.
- Webhooks: HMAC/EdDSA + timestamp + nonce, dedup by 'event _ id'.
- Keystore: Vault/HSM/KMS, Rotation und Rückruf, Trennung per Marke/Region.
- ORA/Richtlinien: RBAC/ABAC, Änderungsprotokolle, Tests.
- WORM-Audit und SLO-Dashboards (Latenz, Fehler, Revoke/Rotation).
- DR/xaoc-Übungen: abgelaufene Token, Signaturersatz, MITM ohne mTLS.
B. Für den Anbieter (RGS/live/JP)
- Ich bewahre keine Geheimnisse im Code auf; Ich verwende Vault/Spoofing über Umgebungsvariablen.
- Auto-Rotation von Token; handle 401/403 mit Update.
- Ich unterschreibe Webhooks/überprüfe Validierungsfenster und Einmaleins.
- Ich überprüfe Schlüsselaktionen und reagiere auf Deprecation/Sunset Header.
- Idempotency on all write-calls, dedup by 'Idempotency-Key'.
14) Anti-Muster (rote Fahnen)
Statische API-Schlüssel ohne Ablaufdatum in der Produktion.
Bearer-Token ohne Kanalbindung (kein MTLS/DPoP).
Speicherung von Geheimnissen im Git/CI-Log/Frontend Config.
Gemeinsamer Schlüssel/Zertifikat für mehrere Marken/Regionen.
Webhooks ohne Signatur und Zeitfenster → Replika.
Keine zentrale Rückrufaktion und kein WORM-Journal.
Keine Idempotenz → doppelte Belastungen/Kredite.
15) Mini-Richtlinienvorlagen (Beispiel, menschenlesbar)
Mandat „rgs→wallet“ (EU, Marke 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', Fenster '± 300s', 'nonce' ist einzigartig, dedup 'event _ id' 24 Stunden.
Die sichere Authentifizierung in iGaming ist eine Kombination aus Praktiken: kurzlebige Mandate, Kanalbindung (mTLS/DPoP), enges Scope/Audience, strikte Idempotenz, Vault/HSM und WORM-Audit, regionale Segmentierung und Beobachtbarkeit. Ein solcher Stack beeinträchtigt nicht die Geschwindigkeit der Integrationen, sondern reduziert radikal das Risiko von Lecks und finanziellen Vorfällen - Geld und Daten bleiben unter Kontrolle, Upgrades sind vorhersehbar und Compliance wird „out of the box“ durchgeführt.
