241 lines
6.7 KiB
Markdown
241 lines
6.7 KiB
Markdown
## 1. Authentification & Inscription
|
|
|
|
### 1.1 Méthodes d'inscription
|
|
|
|
**Décision** : Email/Password uniquement (pas d'OAuth tiers)
|
|
|
|
- ❌ **Pas de Google, Apple, Facebook OAuth** (dépendance services US/Chine)
|
|
- ✅ **Email + mot de passe** (formulaire natif Zitadel)
|
|
- ✅ 2FA (Two-Factor Authentication) disponible
|
|
- ✅ Option "Appareil de confiance" (skip 2FA pour 30 jours)
|
|
|
|
**Clarification technique** :
|
|
- Zitadel utilise OAuth2/OIDC comme **protocole** (standard moderne pour mobile)
|
|
- Mais l'authentification reste 100% **email/password natif**
|
|
- **Aucun fournisseur externe** (Google, Apple, etc.) n'est intégré
|
|
|
|
**Justification** :
|
|
- Souveraineté : pas de dépendance externe
|
|
- RGPD : données 100% contrôlées
|
|
- Coût : 0€ (Zitadel intégré)
|
|
|
|
> 📋 **Référence technique** : Voir [ADR-008 - OAuth2 vs Fournisseurs Tiers](../adr/008-authentification.md#oauth2-pkce--protocole-vs-fournisseurs-tiers) pour clarification protocole vs providers.
|
|
|
|
---
|
|
|
|
### 1.2 Vérification email
|
|
|
|
**Décision** : Différenciée selon le rôle utilisateur
|
|
|
|
#### Pour les auditeurs (écoute uniquement)
|
|
|
|
| État | Capacités |
|
|
|------|-----------|
|
|
| **Email non vérifié** | Lecture illimitée + création max 5 contenus |
|
|
| **Email vérifié** | Toutes fonctionnalités débloquées |
|
|
|
|
**Paramètres** :
|
|
- Lien de vérification expire après **7 jours**
|
|
- Possibilité de renvoyer le lien (max 3 fois/jour)
|
|
- Rappel in-app après création du 3ème contenu
|
|
|
|
**Justification** :
|
|
- Friction minimale à l'inscription
|
|
- Anti-spam sans bloquer l'essai du produit
|
|
- Incitation naturelle à vérifier (déblocage)
|
|
|
|
#### Pour les créateurs (monétisation)
|
|
|
|
**Vérification obligatoire sous 7 jours** pour :
|
|
- Accès au programme de monétisation
|
|
- KYC et reversement des revenus (conformité Mangopay)
|
|
- Publication illimitée de contenus
|
|
|
|
**Justification** :
|
|
- **Conformité légale** : KYC obligatoire pour transferts financiers
|
|
- **Anti-fraude** : Vérification identité réelle pour paiements
|
|
- **Responsabilité** : RoadWave doit pouvoir prouver identité créateurs monétisés
|
|
|
|
---
|
|
|
|
### 1.3 Données requises à l'inscription
|
|
|
|
**Obligatoires** :
|
|
- ✅ Email (format validé)
|
|
- ✅ Mot de passe (voir règles ci-dessous)
|
|
- ✅ Pseudo (3-30 caractères, alphanumérique + underscore)
|
|
- ✅ Date de naissance (vérification âge minimum)
|
|
|
|
**Optionnelles** :
|
|
- ❌ Nom complet (privacy by design)
|
|
- ❌ Photo de profil (avatar par défaut généré)
|
|
- ❌ Bio (ajout ultérieur)
|
|
|
|
**Âge minimum** :
|
|
- **13 ans minimum** (conformité réglementation réseaux sociaux EU)
|
|
- Vérification à l'inscription via date de naissance
|
|
- Blocage inscription si <13 ans avec message explicite
|
|
|
|
**Justification** :
|
|
- RGPD minimal data
|
|
- Friction réduite (4 champs max)
|
|
- Protection mineurs (obligation légale)
|
|
|
|
---
|
|
|
|
### 1.4 Tranches d'âge des contenus
|
|
|
|
**Décision** : Classification obligatoire des contenus
|
|
|
|
**Catégories** :
|
|
- 🟢 **Tout public** (défaut)
|
|
- 🟡 **13+** : contenu mature léger (débats, actualité sensible)
|
|
- 🟠 **16+** : contenu mature (violence verbale, sujets sensibles)
|
|
- 🔴 **18+** : contenu adulte (langage explicite, sujets réservés)
|
|
|
|
**Règles de diffusion** :
|
|
- Utilisateur 13-15 ans → contenus 🟢 uniquement
|
|
- Utilisateur 16-17 ans → contenus 🟢 🟡
|
|
- Utilisateur 18+ → tous contenus
|
|
|
|
**Modération** :
|
|
- Vérification obligatoire de la classification lors de la validation
|
|
- Reclassification possible par modérateurs
|
|
- Strike si classification volontairement incorrecte
|
|
|
|
**Justification** :
|
|
- Protection mineurs (obligation légale)
|
|
- Responsabilité plateforme
|
|
- Coût : champ supplémentaire + règle algo
|
|
|
|
---
|
|
|
|
### 1.5 Validation mot de passe
|
|
|
|
**Règles** :
|
|
- ✅ Minimum **8 caractères**
|
|
- ✅ Au moins **1 majuscule**
|
|
- ✅ Au moins **1 chiffre**
|
|
- ❌ Pas de symbole obligatoire (simplicité)
|
|
|
|
**Validation** :
|
|
- Côté client (feedback temps réel)
|
|
- Côté backend (sécurité)
|
|
- Message d'erreur explicite par règle non respectée
|
|
|
|
**Justification** :
|
|
- Standard industrie
|
|
- Bloque 95% des mots de passe faibles
|
|
- UX acceptable (pas trop restrictif)
|
|
|
|
---
|
|
|
|
### 1.6 Two-Factor Authentication (2FA)
|
|
|
|
**Décision** : Optionnel mais recommandé
|
|
|
|
**Méthodes disponibles** :
|
|
- ✅ TOTP (Time-based One-Time Password) via app (Google Authenticator, Authy)
|
|
- ✅ Email (code 6 chiffres, expire 10 min)
|
|
- ❌ SMS (coût élevé ~0.05€/SMS)
|
|
|
|
**Appareil de confiance** :
|
|
- Option "Ne plus demander sur cet appareil" → bypass 2FA pendant **30 jours**
|
|
- Révocable depuis paramètres compte
|
|
- Liste des appareils de confiance visible
|
|
|
|
**Justification** :
|
|
- Sécurité renforcée sans coût SMS
|
|
- UX : appareil de confiance évite friction quotidienne
|
|
- Zitadel natif (0€)
|
|
|
|
---
|
|
|
|
### 1.7 Tentatives de connexion
|
|
|
|
**Règles** :
|
|
- Maximum **5 tentatives** par période de **15 minutes**
|
|
- Blocage temporaire après 5 échecs
|
|
- Compteur reset automatique après 15 min
|
|
- Notification email si blocage (tentative suspecte)
|
|
|
|
**Déblocage** :
|
|
- Automatique après 15 min
|
|
- Ou via lien "Mot de passe oublié"
|
|
|
|
**Justification** :
|
|
- Anti brute-force
|
|
- Standard industrie (équilibre sécurité/UX)
|
|
- Zitadel natif (0€)
|
|
|
|
---
|
|
|
|
### 1.8 Sessions et refresh tokens
|
|
|
|
**Durée de vie** :
|
|
- **Access token** : 15 minutes
|
|
- **Refresh token** : 30 jours
|
|
|
|
**Rotation** :
|
|
- Refresh token rotatif (nouveau token à chaque refresh)
|
|
- Ancien token invalidé immédiatement
|
|
- Détection token replay attack
|
|
|
|
**Extension automatique** :
|
|
- Si app utilisée, session prolongée automatiquement
|
|
- Inactivité 30 jours → déconnexion
|
|
|
|
**Justification** :
|
|
- Sécurité (token court-vie)
|
|
- UX (pas de reconnexion fréquente)
|
|
- Standard OAuth2/OIDC
|
|
|
|
---
|
|
|
|
### 1.9 Multi-device
|
|
|
|
**Décision** : Sessions simultanées illimitées
|
|
|
|
**Gestion** :
|
|
- Liste des devices connectés visible (OS, navigateur, dernière connexion, IP/ville)
|
|
- Révocation individuelle possible
|
|
- Révocation globale "Déconnecter tous les appareils"
|
|
|
|
**Alertes** :
|
|
- Notification push + email si connexion depuis nouveau device
|
|
- Détection localisation suspecte (IP pays différent)
|
|
|
|
**Justification** :
|
|
- UX maximale (écoute voiture + tablette maison + web)
|
|
- Sécurité via transparence (utilisateur voit tout)
|
|
- Coût : table sessions PostgreSQL
|
|
|
|
---
|
|
|
|
### 1.10 Récupération de compte
|
|
|
|
**Méthode** : Email uniquement
|
|
|
|
**Processus** :
|
|
1. Utilisateur clique "Mot de passe oublié"
|
|
2. Email avec lien de reset envoyé
|
|
3. Lien expire après **1 heure**
|
|
4. Page de reset : nouveau mot de passe (validation règles)
|
|
5. Confirmation + déconnexion tous devices (sauf celui en cours)
|
|
|
|
**Notifications** :
|
|
- Email immédiat si changement mot de passe
|
|
- Push si changement depuis appareil non reconnu
|
|
|
|
**Limite** :
|
|
- Maximum **3 demandes/heure** (anti-spam)
|
|
|
|
**Justification** :
|
|
- Standard sécurité
|
|
- Pas de coût SMS
|
|
- Protection contre attaque sociale
|
|
|
|
---
|
|
|
|
## Récapitulatif Section 1
|