6.2 KiB
6.2 KiB
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
- ✅ 2FA (Two-Factor Authentication) disponible
- ✅ Option "Appareil de confiance" (skip 2FA pour 30 jours)
Justification :
- Souveraineté : pas de dépendance externe
- RGPD : données 100% contrôlées
- Coût : 0€ (Zitadel intégré)
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 :
- Utilisateur clique "Mot de passe oublié"
- Email avec lien de reset envoyé
- Lien expire après 1 heure
- Page de reset : nouveau mot de passe (validation règles)
- 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