Blog

Tips, guides, and privacy advice

← Back to Blog
Conseils développeurs

Comment construire un système de vérification d'email qui fonctionne vraiment

17 décembre 2025·9 min read

Pourquoi la vérification email est plus importante qu'il n'y paraît

La vérification email répond à trois objectifs principaux. Premièrement, elle confirme que l'utilisateur contrôle réellement l'adresse fournie — les fautes de frappe comme [email protected] sont étonnamment fréquentes. Deuxièmement, elle réduit la création massive de comptes automatisés par des bots qui utilisent des adresses jetables ou fictives. Troisièmement — et c'est le point le plus sous-estimé — une adresse email vérifiée est une condition de sécurité préalable à la réinitialisation du mot de passe. Sans vérification, un attaquant pourrait enregistrer l'adresse d'autrui et déclencher un email de réinitialisation. Le OWASP Authentication Cheat Sheet couvre ces risques en détail.

De plus, si tu envoies des emails aux utilisateurs — notifications, reçus, mises à jour — tu dois t'assurer que les adresses sont réelles et accessibles. Envoyer vers des adresses invalides augmente ton taux de rebond, nuit à ta réputation d'expéditeur et fait atterrir tes futurs emails en spam.

Le flow de vérification complet, étape par étape

Le protocole de transport email est défini dans RFC 5321 — mais les décisions au niveau applicatif t'appartiennent entièrement. Chaque étape compte :

  1. L'utilisateur soumet le formulaire d'inscription. Valider le format email côté serveur — pas seulement côté client.
  2. Générer un token cryptographiquement aléatoire. Pas un UUID, pas un ID séquentiel, pas un timestamp — de la vraie aléatoire cryptographique avec au moins 32 octets d'entropie.
  3. Stocker le hash du token dans la base de données. Stocker le hash SHA-256 du token (pas le token brut), avec l'ID utilisateur, le timestamp de création, la date d'expiration et un flag "utilisé".
  4. Envoyer l'email de vérification. Le lien contient le token brut comme paramètre de requête. Toujours utiliser HTTPS.
  5. L'utilisateur clique sur le lien. Le serveur reçoit le token brut dans la chaîne de requête.
  6. Valider le token. Hasher le token entrant, trouver la correspondance en base, vérifier l'expiration et le flag "utilisé".
  7. En cas de succès : marquer l'adresse email comme vérifiée, marquer le token comme utilisé, connecter l'utilisateur.
  8. En cas d'échec : afficher un message d'erreur précis et actionnable avec un lien pour demander un nouvel email.

Génération de tokens sécurisés

L'erreur la plus courante : utiliser un UUID v4 comme token de vérification. Les UUID sont bons pour les identifiants de base de données, mais pas conçus comme tokens de sécurité. La bonne approche : utiliser le générateur de nombres aléatoires cryptographiques de ton runtime. En Node.js : crypto.randomBytes(32).toString('hex'). En Python : secrets.token_urlsafe(32). En .NET : RandomNumberGenerator.GetBytes(32). Le OWASP Authentication Cheat Sheet recommande au moins 32 octets (256 bits) d'entropie.

Pour le stockage : stocker le hash SHA-256 en base, envoyer le token brut dans le lien email. Lors de la validation, hasher le token entrant et comparer au hash stocké. Si un attaquant accède à la base de données, les hashes sont inutilisables. Utiliser des comparaisons en temps constant : crypto.timingSafeEqual() en Node.js, hmac.compare_digest() en Python.

Expiration des tokens — bien gérer les détails

24 à 48 heures est le standard pour l'expiration des tokens. Suffisamment long pour qu'un utilisateur qui s'inscrit la nuit puisse vérifier son email le lendemain matin. Suffisamment court pour limiter la fenêtre d'utilisation d'un token volé. Mentionner l'expiration dans l'email : "Ce lien de vérification expire dans 24 heures."

En cas d'expiration, le message d'erreur doit être précis et actionnable — pas "token invalide", mais "Ce lien a expiré. Clique ici pour en demander un nouveau." Gérer aussi l'état "déjà vérifié" explicitement : rediriger vers l'application plutôt qu'afficher une erreur confuse.

L'email de vérification lui-même

Objet : "Veuillez confirmer votre adresse email" — direct, sans ambiguïté. Pas de marketing, pas de langage d'urgence agressif. Contenu : deux à trois phrases de contexte, un bouton clairement libellé ("Confirmer l'adresse email") et l'URL brute en alternative pour les clients email qui ne rendent pas le HTML. Une alternative en texte brut est obligatoire. Ne jamais utiliser de raccourcisseurs d'URL dans les emails de vérification.

Tester correctement ton flow de vérification

Chaque modification du flow de vérification doit être testée avec un vrai email vers une vraie boîte de réception. Ouvrir un email temporaire, copier l'adresse dans le formulaire d'inscription, créer un compte test et regarder l'email de vérification arriver en temps réel. Cela prouve que l'email est réellement livré — pas seulement accepté par l'API du fournisseur.

  • Chemin nominal : inscription, réception de l'email, clic sur le lien, compte vérifié
  • Token expiré : fixer l'expiration dans le passé en base, cliquer le lien — message d'erreur clair avec option de renvoi
  • Token déjà utilisé : cliquer le même lien deux fois — message "déjà vérifié" au lieu d'une erreur
  • Token falsifié : modifier la valeur du token dans l'URL — message d'erreur clair
  • Flow de renvoi : demander un nouvel email, confirmer le nouveau lien, vérifier que l'ancien ne fonctionne plus
Le test le plus important avant le déploiement : ouvrir un email temporaire, créer un compte test, confirmer que l'email de vérification arrive en quelques secondes, cliquer le lien, vérifier que le compte est marqué comme confirmé en base. Ce test de bout en bout détecte les problèmes de livraison, de rendu de template et de génération de lien — tous invisibles aux tests unitaires. À répéter à chaque déploiement.

Authentification email : SPF, DKIM et DMARC

Sans authentification email correcte, les emails de vérification arrivent en spam. SPF autorise les serveurs d'envoi via un enregistrement DNS TXT. DKIM ajoute une signature cryptographique. DMARC définit la politique en cas d'échec SPF ou DKIM. Utiliser MXToolbox pour vérifier les trois configurations. Consulter la documentation sur l'authentification email chez ton fournisseur d'envoi.

Erreurs courantes à éviter

  • Ne pas invalider le token après utilisation. Toujours définir le flag "utilisé" et le vérifier à chaque validation.
  • Envoyer des emails de bienvenue avant la vérification. Activer les séquences d'onboarding seulement après vérification confirmée.
  • Ne pas limiter les demandes de renvoi. Limiter les renvois par adresse à par exemple trois par heure.
  • Envoyer des liens de vérification en HTTP. Toujours utiliser HTTPS — sans exception.
  • Ne pas journaliser les événements de vérification. Quand le token a été créé, envoyé et cliqué — essentiel pour le diagnostic.
  • Utiliser le même token pour plusieurs usages. Des tokens séparés pour la vérification, la réinitialisation de mot de passe et le changement d'email.