OAuth2/OpenID Connect dans le noyau
OIDC par-dessus OAuth2 - le moyen standard de prouver "qui l'utilisateur/client" et donner короткоживущий l'accès vers API. Au cœur de la plate-forme, il devient une capacité centrale : une seule entrée pour les clients, les opérateurs et les services ; privilèges minimaux ; le risque mesurable ; respect des réglementations régionales et des licences.
1) Objectifs et principes
Séparation de « deploy vs enable » : on déplace le code séparément, on active l'accès par les drapeaux/stratégies.
Les jetons korotkojivouchtchie + la rénovation sûre : nous réduisons le préjudice aux fuites.
Multi-tenant/région : tous les artefacts sont marqués par 'tenant/region/licence'.
Les politiques au-dessus des tokens : les solutions font PDP (RBAC/ABAC), PEP sur gateway/services.
Protection des canaux : TLS1. 2 +, si possible mTLS/DPoP, strict CORS/CSRF.
Observation et audit : visibilité en flux, par client, par région.
2) Les flux et quand les appliquer
Code d'autorisation + PKCE (SPA/Mobile/Web) - défaut pour les logins personnalisés.
Autorisation des appareils (consoles/TV/CLI) - lorsqu'il n'y a pas de navigateur.
Client Credentials (machine-to-machine) - intégrations de service sans utilisateur.
Token Exchange (RFC 8693, OBO) - le service agit au nom de l'utilisateur.
CIBA/Back-channel (facultatif) est une authentification push sans redirection.
- PAR (Pushed Autorisation Requests) : Les paramètres d'autorisation sont transmis sur un canal serveur sécurisé.
- JAR (JWT Secured Autorisation) - Les paramètres de la demande sont signés/cryptés.
- JARM est une réponse d'autorisation protégée (JWT) résistante aux substitutions.
- RAR (Rich Autorisation Requests) - Demandes de droits d'accès riches (autorisations détaillées).
3) Tokens et marques
Types :- ID Token (OIDC) - qui est entré (montrer uniquement au client/front).
- Access Token (AT) est un droit d'action (courte vie).
- Refresh Token (RT) : Met à jour AT ; est stocké uniquement dans un environnement de confiance.
- AT : 5-15 min (web/mobile), 2-5 min (service-to-service).
- RT: 7–30 дней (web/mobile) с rotation + reuse detection.
- ID : ≤ 5 min.
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
}
Signature : ES256/EdDSA, clés publiques - dans JWKS avec 'kid' et rotation.
4) Contour des sessions et logout
Server-side session для web (cookie `SameSite=Lax/Strict`, `HttpOnly`, `Secure`).
Back-Channel Logout + Front-Channel Logout (OIDC) - terminaison synchrone de tous les clients.
Step-Up MFA : en cas d'actions sensibles, un contrôle répété ('acr' est augmenté).
Revocation & Introduction : Désactivation immédiate de RT/AT par incident.
5) Sécurité des clients
Web/SPAs : Code d'autorisation + PKCE, pas d'implicit ; rigoureux CORS/Content-Security-Policy.
Mobile : navigateur système (AppAuth), test d'intégrité (App Attestation/DeviceCheck), stockage sécurisé RT.
Desktop/CLI/TV: Device Flow; Stockez RT dans les coffres-secrets OS.
DPoP ou mTLS-bound tokens pour lier AT au périphérique/connexion.
6) Service-à-service
mTLS + Service court JWT (aud-scoped), délivre un STS avec KMS/HSM.
Identités workload's : SPIFFE/SPIRE.
Politique "étroite à large" : audience spécifique et scopes au lieu de ".
7) Registre Scope et consentement (consent)
Nommage : 'ressource : action' - 'wallet : read', 'wallet : transfer', 'bets : place', 'kyc : status. read`.
Configurer la visibilité et la sensibilité des copeaux.
L'écran de consentement provient de RAR/Scopes ; gardez l'historique des consentements et laissez la révocation.
json
{
"type":"wallet. transfer",
"actions":["create"],
"locations":["https://api. core/wallet"],
"datatypes":["payment"],
"resources":[{"wallet_id":"w_123","currency":"EUR","amount_max":1000}]
}
8) Intégration avec autorisation (PDP/PEP)
PEP sur l'API Gateway valide AT/DPoP/mTLS, enrichit le contexte (IP/ASN/région/tenant), fait une requête au PDP.
Le PDP (OPA/cedar) applique les politiques RBAC/ABAC/ReBAC et renvoie « ALLOW/DENY » avec explication et TTL.
Le cache de décision de PEP (TTL 30-120 s) avec un handicap par événement (changement de rôle/règles).
9) Multi-tenants et régions
Tous les jetons et sessions sont marqués « tenant/region/licence » ; Le PDP valide la conformité à la ressource.
JWKS/clés séparées et listes de rappels par région ; la région croisée est à travers des écluses de confiance.
Limitation de la résidence des données : l'introspection/revocation est effectuée dans la région d'origine.
10) Gains de protocole
PAR + JAR + JARM - protègent les paramètres et les réponses d'autorisation.
Nonce/État/PKCE - pour tous les clients publics.
Autorisation des appareils Pushed (à haut risque).
JWT Access Tokens avec un minimum de stigmates + opaque option pour les intégrations externes par introspection.
Pratiques de type FAPI : algorithmes de signature rigoureux, exigences de TLS/redirect_uri/PKCE.
11) Erreurs et politique de retour
Uniformiser les réponses :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`.
Rate-limit pour les endpoints sensibles ('/token ', '/introspect', '/revoke '), backoff exponentiel.
12) Observation et audit
Métriques :- `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 (immuable) : émission de tokens, escalade des droits, retrait des consentements, rotation des clés.
13) Gestion des clés et rotation
Signature JWT : KMS/HSM, publication JWKS avec 'kid'.
Période dual-key : IdP signe nouveau, les vérificateurs acceptent l'ancien + nouveau avant de basculer.
Rotation régulière et revoke d'urgence ; surveillance de la consommation de 'kid'.
14) Pleybooks (runbooks)
1. Compromis de la clé de signature
Immédiatement revoke 'kid', libérer un nouveau RT/sessions force-invalidation, rapport à l'audit.
2. Masse 'invalid _ token '/hauteur 401
Vérifier la disynchrone de l'horloge expirée AT, cassée JWKS-cache ; augmenter temporairement tolerance 'clock _ skew'.
3. Réutilisation de RT
Bloquer la session ('sid'), avertir l'utilisateur, exiger step-up pour une nouvelle connexion, enquête.
4. Chute de l'IdP
Activer le mode « read-only autorisation » : garder les AT en vigueur jusqu'à la TTL, limiter les nouveaux identifiants, scanner le cache d'introspection.
5. Attaque sur '/token'
Renforcer les filtres rate-limit/bot, inclure mTLS/DPoP pour les clients sensibles, mettre les RT « froids » dans un segment distinct.
15) Tests
Contract: OIDC discovery, JWKS, OpenID provider config.
Sécurité : PKCE/nonce/état sont obligatoires ; jeux negative (substitutions de « redirect _ uri », rouse RT).
Interoperability : clients (web/mobile/CLI), fuseaux horaires différents/locals.
Chaos : échec PAR/JARM, retards JWKS, rotated 'kid' « à la volée ».
E2E: step-up MFA, OBO (token exchange), logout (front/back-channel), revoke/rotate.
16) Exemples de configurations
OIDC/Serveur d'autorisation (fragment YAML) :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
Registre Scope :
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) Chèque-liste avant la vente
- Inclus PKCE/nonce/état ; PAR/JAR/JARM sont actifs.
- Les TTL AT/RT/ID sont spécifiés ; RT rotation + reuse detection incluse.
- DPoP ou mTLS-binding pour les clients/opérations sensibles.
- JWKS c `kid`; rotation automatique et surveillance de la consommation de clés.
- Conseil/RAR et registre des scoops ; step-up MFA pour les actions sensibles.
- Les PDP/PEP sont intégrés, cache des solutions pour personnes handicapées.
- Les tokens contiennent « tenant/region/licence » ; la résidence est respectée.
- Observabilité : métriques, logs, traçage ; alerties sur 'invalid _ token', 'rt _ reuse', 'jwks _ skew'.
- Pleybooks en revoke/rotate/lockdown ; bouton de logout d'urgence.
- Ensemble de tests E2E/chaos/interop effectués sur des stands.
Conclusion
En intégrant la OAuth2/OIDC en tant que capacité de plateforme, vous obtenez des flux d'autorisation prévisibles, des tokens gérés, des politiques d'accès uniques et un risque mesurable. Court AT, sécurisé RT, rotation des clés, PAR/JARM/DPoP, consentement et step-up sont les pratiques qui rendent la sécurité par défaut, et l'évolution est rapide et indolore pour les équipes et les partenaires.