espace-paie-odentas/SYSTEM_AUTH_PASSWORD.md

3 KiB

Système d'Authentification par Mot de Passe

Résumé des modifications

J'ai implémenté un système d'authentification par mot de passe en complément du système OTP existant. Voici les principales modifications :

🔧 Nouveaux endpoints API

/api/auth/signin-password (POST)

  • Permet la connexion avec email/mot de passe
  • Retourne une session et définit un cookie httpOnly access_token
  • Effectue les mêmes vérifications de sécurité que le système OTP (staff/revocation)

/api/auth/password-update (POST)

  • Met à jour le mot de passe d'un utilisateur connecté
  • Marque l'utilisateur comme ayant un mot de passe (user_metadata.hasPassword = true)
  • Exige un mot de passe d'au moins 12 caractères

/api/auth/password-status (GET)

  • Récupère le statut du mot de passe pour un utilisateur connecté
  • Retourne { hasPassword: boolean }

🎨 Interface utilisateur

Page de sécurité (/compte/securite)

  • La card de changement de mot de passe est maintenant fonctionnelle
  • Utilise les endpoints API sécurisés au lieu de Supabase directement
  • Affiche le statut du mot de passe (défini/non défini)
  • ⚠️ Section 2FA temporairement désactivée comme demandé

Page de connexion (/signin)

  • Nouveau toggle pour choisir entre "Code par e-mail" et "Mot de passe"
  • Mode mot de passe : champs email + password
  • Mode OTP : comportement existant inchangé
  • Interface cohérente avec le design existant

🔐 Sécurité

  • Les mots de passe sont gérés par Supabase Auth (chiffrement automatique)
  • Les mêmes vérifications de révocation s'appliquent aux deux modes d'auth
  • Les cookies access_token httpOnly maintiennent la sécurité de session
  • Minimum 12 caractères pour les mots de passe

📋 Utilisation

Pour les utilisateurs

  1. Définir un mot de passe : Aller sur /compte/securite → section "Mot de passe (facultatif)"
  2. Se connecter : Sur /signin, choisir "Mot de passe" au lieu de "Code par e-mail"

Pour les développeurs

  • Les endpoints existants n'ont pas été modifiés
  • Le middleware et la gestion des sessions restent identiques
  • Les métadonnées utilisateur incluent maintenant hasPassword: true quand applicable

Tests à effectuer

  1. Créer un mot de passe depuis la page de sécurité
  2. Vérifier que le statut "Mot de passe défini" s'affiche
  3. Se connecter avec email/mot de passe
  4. Vérifier que l'ancien système OTP fonctionne toujours
  5. Tester avec un utilisateur staff
  6. Tester avec un utilisateur révoqué

🚀 Prochaines étapes suggérées

  1. Réinitialisation de mot de passe : Endpoint pour changer un mot de passe oublié
  2. 2FA : Réactiver et intégrer la double authentification
  3. Politique de mot de passe : Ajouter des règles de complexité configurables
  4. Audit : Logger les tentatives de connexion par mot de passe

Le système est maintenant prêt à utiliser avec les deux modes d'authentification fonctionnels ! 🎉