Files
roadwave/docs/adr/008-authentification.md
2026-01-31 11:45:11 +01:00

5.3 KiB

ADR-008 : Authentification et Gestion d'Identité

Statut : Accepté Date : 2025-01-18

Contexte

RoadWave nécessite un système d'authentification sécurisé pour mobile (iOS/Android), scalable jusqu'à 10M utilisateurs, avec contraintes de coût réduit et conformité RGPD.

Exigence de souveraineté : En cohérence avec ADR-004 (CDN 100% français), les données d'authentification doivent être hébergées en France pour garantir une souveraineté totale.

Décision

Zitadel self-hosted sur OVH France pour l'IAM avec validation JWT locale côté API Go.

Architecture de déploiement :

  • Container Docker sur le même VPS OVH (Gravelines, France) que l'API
  • Base de données PostgreSQL partagée avec RoadWave (séparation logique par schéma)
  • Aucune donnée d'authentification ne transite par des serveurs tiers

Alternatives considérées

Solution Coût (10M users) Performance Simplicité Intégration Go
Zitadel 200-500€/mois Excellente Élevée SDK natif
Supabase Auth 32K€/mois Excellente Élevée REST API
Keycloak 200-800€/mois Bonne Faible Lib tierce
Auth0 50K€+/mois Excellente Élevée SDK natif
JWT Custom 0€ (dev) Excellente Moyenne Natif

Justification

  • Souveraineté garantie : Self-hosting sur OVH France (Gravelines) = 100% des données en France, cohérent avec ADR-004
  • Coût maîtrisé : 100x moins cher que Supabase/Auth0 à 10M users (pas de coût par utilisateur actif)
  • Performance : JWT validation locale = 0 latence auth sur chaque requête API
  • Stack alignée : Go + PostgreSQL + Redis (déjà dans RoadWave)
  • Scalabilité prouvée : Clients avec 2.3M tenants, architecture event-sourced
  • RGPD natif : Open source, contrôle total des données, DPA non nécessaire (pas de sous-traitant)
  • Standards ouverts : OpenID Connect certifié (pas de vendor lock-in, migration facile si besoin)

Architecture

┌─────────────────┐
│  Mobile Apps    │  OAuth2 PKCE + Refresh tokens
│  (iOS/Android)  │
└────────┬────────┘
         │ HTTPS
         │
    ┌────▼─────────────────────────────────┐
    │   OVH VPS Essential (Gravelines, FR) │
    │                                       │
    │  ┌─────────────────┐                │
    │  │  Zitadel IdP    │  Port 8081    │
    │  │  (Docker)       │  Self-hosted  │
    │  └────────┬────────┘                │
    │           │ JWT token               │
    │  ┌────────▼────────┐                │
    │  │  Go + Fiber API │  Port 8080    │
    │  │  (RoadWave)     │  Validation   │
    │  │                 │  JWT locale   │
    │  └────────┬────────┘                │
    │           │                          │
    │  ┌────────▼────────┐                │
    │  │  PostgreSQL     │  Schémas:     │
    │  │  + PostGIS      │  - roadwave   │
    │  │                 │  - zitadel    │
    │  └─────────────────┘                │
    └───────────────────────────────────────┘

Données 100% hébergées en France (souveraineté totale)

Exemple d'intégration

import "github.com/zitadel/zitadel-go/v3/pkg/authorization/oauth"

// Validation JWT locale haute performance
verifier := oauth.WithJWT(config)
app.Use(verifier.Middleware())

// Accès aux claims
userID := ctx.Locals("sub").(string)

Conséquences

Positives

  • Souveraineté totale : Données 100% en France (OVH Gravelines), contrôle complet
  • Coût prévisible : Pas de surprise à la croissance (pas de facturation par utilisateur)
  • Performance : Latence minimale (même VPS que l'API)
  • Fonctionnalités avancées : MFA, passkeys, SSO disponibles gratuitement
  • Conformité RGPD : Pas de DPA nécessaire (pas de sous-traitant externe)
  • Standards ouverts : Migration facile vers autre solution si besoin

Négatives

  • Maintenance : Nécessite monitoring et mises à jour régulières
  • Complexité initiale : Configuration PostgreSQL schema partagé
  • Backup : Responsabilité de sauvegarder les données utilisateurs
  • Scaling : Migration Kubernetes nécessaire au-delà de 500K utilisateurs

Déploiement

  • MVP (0-20K) : Docker sur VPS OVH Essential (coût inclus)
  • Growth (20K-500K) : Même architecture, VPS plus puissant si besoin
  • Scale (500K+) : Migration Kubernetes managé avec haute disponibilité

Coût Estimé

Phase Utilisateurs Coût Zitadel/mois
MVP 0-20K 0€ (inclus VPS)
Growth 20K-500K 0€ (inclus VPS)
Scale 500K+ 50-100€ (instance K8s dédiée)

Comparaison : Auth0 coûterait 50K€/mois pour 10M utilisateurs vs 100€/mois en self-hosted.