Skip to content

[BE-INFRA-03] Inventaire exhaustif des secrets + config Go + rotation JWT RS256 sans downtime (kid support) #425

Description

@K0lux

section: Secrets & Config | prio: P0 | est: 3h

Pourquoi

La rotation des clés JWT sans downtime est obligatoire pour la sécurité à long terme. Sans kid support, changer la clé invalide toutes les sessions actives.

Acceptance Criteria

  • JWT RS256 : JWT_PRIVATE_KEY_KID1 (RSA 4096 PEM, clé active), JWT_PUBLIC_KEY_KID1 (clé publique partageable), JWT_PRIVATE_KEY_KID2 (clé future pour rotation), JWT_PUBLIC_KEY_KID2. Le header JWT inclut kid pour identifier la clé. Le middleware JWTMiddleware supporte 2 clés actives simultanément.
  • Google OAuth : GOOGLE_CLIENT_ID uniquement (pas de client secret pour la vérification ID tokens)
  • SMS : AT_API_KEY, AT_USERNAME, AT_SENDER_ID=QUANTIFY
  • Email : SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, MAIL_FROM, DKIM_PRIVATE_KEY
  • PostgreSQL : DATABASE_URL (primary, sslmode=require), DATABASE_URL_REPLICA (read replica), TEST_DB_PASSWORD
  • Redis : REDIS_CLUSTER_URLS (comma-separated), REDIS_PASSWORD
  • Cloudflare R2 : R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET_AVATARS, R2_CDN_URL
  • Crypto : TOTP_ENCRYPTION_KEY (AES-256, 64 hex chars)
  • App : BCRYPT_COST=12, BCRYPT_WORKER_POOL_SIZE, MAX_LOGIN_ATTEMPTS=5, LOCKOUT_DURATION_MINUTES=15, OTP_DAILY_LIMIT=5, USERNAME_RECLAIM_DELAY_DAYS=30, USERNAME_CHANGE_COOLDOWN_DAYS=30, AUTO_REVOKE_METER_ADMIN=true, ACCOUNT_DELETION_GRACE_DAYS=30
  • Struct Config dans config/ avec validation au démarrage (panic si secret critique absent)
  • .env.example exhaustif commenté. Aucun secret en dur dans le code.

Fichiers

config/
├── auth.go
├── user.go
└── validate.go
.env.example

Scale

Rotation JWT sans downtime = zéro déconnexion lors des rotations de clés sécurité.

Metadata

Metadata

Assignees

No one assigned

    Labels

    infraInfrastructuresecuritySécurité, auth, permissions

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions