Initial commit
This commit is contained in:
119
docs/adr/008-authentification.md
Normal file
119
docs/adr/008-authentification.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user