## 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 🟢 🟡 (Tout public + 13+) - Utilisateur 16-17 ans → contenus 🟢 🟡 🟠 (Tout public + 13+ + 16+) - 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