# 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 ```go 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.