Authentification sans mot de passe : pourquoi ? Comment ?
Défauts du mot de passe
Pour l'utilisateur (mémoriser, règles de "sécurité", perte...)
Pour le développeur (Responsabilité des mots de passe)
Première solution : OAuth / Social Log-in
Questions sur la vie privée, toujours plusieurs comptes
Complexité
Vendor lock-in
Seconde solution : Externaliser
Pas toujours plus simple
Payant à partir d'une certaine échelle
Pas vraiment de changement pour l'utilisateur
Tous les problèmes viennent du mot de passe
Déléguons le problème
Tout le monde a un compte mail et y est déjà connecté
le fournisseur de mail gère le mot de passe
Beaucoup plus simple que OAuth
Comment ça marche ?
Fonctionnement détaillé côté serveur
Génération du secret
⚙️ JWT ⚙️
Vérification du token
Décoder le token et le vérifier grace au secret avec lequel on a signé le JWT
Vérifier et agir selon le cas :
type=login : Login classique
type=register et sub=null : on veut créer un utilisateur
type=register et sub!=null : on veut associer un email à un utilisateur existant
Cas 1 : Login
Utilisateur inexistant : échec ❌ (Mais on peut lui proposer de s'enregistrer)
Utilisateur trouvé en base : login success ✅ (On crée sa session et on stocke l'id de session dans un cookie.)
Cas 2 : register d'un nouvel utilisateur
L'email est déjà utilisé : échec ❌ (Mais on peut lui proposer de se connecter)
L'email est libre : on peut créer l'utilisateur ✅ (On crée aussi sa session et on stocke l'id de session dans un cookie.)
Cas 3 : register d'un utilisateur existant
L'email est déjà utilisé : échec ❌ (Mais on peut lui proposer de se connecter)
L'email est libre : on peut associer le mail à l'utilisateur dont l'id est présent dans le token ✅ (Puis on crée sa session, finalement tous les cas sont un cas de login)
Démo / Code
Aller plus loin
Variantes
Au lieu du mail on peut imaginer plusieurs choses
SMS
Message teams
Push sur téléphone
On peut imaginer une réponse au lieu du clic sur un lien (attention à la sécurité)
Améliorations
Avec du polling ou des websocket, on peut rafraichir la session sur la page ou on est après avoir entré son email
Avantage : on peut ouvrir son mail sur un autre device
Complique le processus qui ne peut plus être stateless
Si on combine les deux...
Merci !
DIY Auth. sans mot de passe Prépa démo : Delete le container docker pcrops-db Recréer le container Re-créer le schéma (npx prisma migrate deploy) Préparer le client mail (ouvrir protonmail ou mailhog) Si mailhog : changer les variables d'env