Tester le protocole de validation de l'adresse e-mail avec un test d'origine

Publié le 8 juillet 2026

Lorsque vous collectez une adresse e-mail lors d'une inscription, d'une connexion, d'un abonnement, d'un paiement, d'une récupération de compte ou d'un autre processus, il est courant de confirmer que l'adresse e-mail appartient à la personne qui la saisit. Les méthodes de validation existantes, telles que les mots de passe à usage unique ou les liens de validation par e-mail (liens magiques), obligent l'utilisateur à quitter votre site. Ce processus perturbateur peut augmenter le risque que l'utilisateur, qu'il s'agisse d'une personne ou d'un agent, abandonne complètement sa session et ne termine jamais son processus d'authentification.

L'API Email Verification est une proposition qui permet au navigateur de communiquer directement avec le fournisseur de messagerie pour vérifier que l'utilisateur est propriétaire de l'adresse e-mail. Les utilisateurs sélectionnent un e-mail dans la suggestion de saisie automatique ou de saisie semi-automatique du navigateur, envoient le formulaire, et le site valide l'adresse e-mail auprès du fournisseur sans envoyer d'e-mail ni interrompre le flux de l'utilisateur.

Démonstration de l'invite utilisateur de l'API Email Verification
Démo de l'invite utilisateur de l'API Email Verification

La collecte d'adresses e-mail est un point de conversion essentiel dans le parcours d'un utilisateur. Chrome aimerait recevoir des commentaires sur la proposition des sites qui souhaitent valider des e-mails, des fournisseurs de messagerie qui peuvent effectuer la validation, et des utilisateurs qui suivent le processus. Vous pouvez vous inscrire à la phase d'évaluation dès aujourd'hui et suivre les instructions d'implémentation ici. Pour la configuration générale de la phase d'évaluation, consultez Premiers pas avec les phases d'évaluation.

Vous pouvez essayer le flux avec un compte de démonstration :

Flux de validation de l'adresse e-mail

Les sections suivantes expliquent ce dont vous et vos utilisateurs avez besoin pour démarrer le flux de validation de l'adresse e-mail, ainsi que l'ensemble du workflow lorsque vous utilisez le protocole de validation de l'adresse e-mail.

Termes clés

Voici les termes clés de l'API Email Verification :

  • Validateur : site qui collecte l'adresse e-mail et souhaite la valider. Le validateur est également appelé partie de confiance.
  • Fournisseur de messagerie : service fournissant l'adresse e-mail de l'utilisateur, par exemple gmail.com.
  • Émetteur : service qui gère le compte de l'adresse e-mail de l'utilisateur, par exemple accounts.google.com. L'émetteur est également appelé fournisseur d'identité.

Dans certains cas, le fournisseur de messagerie et l'émetteur peuvent opérer à partir du même domaine. Toutefois, il est important de faire la distinction entre avoir une adresse e-mail et avoir une session active pour le compte associé.

Architecture du flux de validation d'adresse e-mail
Architecture du flux de validation de l'adresse e-mail

Prérequis

  • L'utilisateur doit être connecté à son fournisseur de messagerie ou à son émetteur sur le même profil de navigateur. Par exemple, s'il utilise Gmail, il doit être connecté à son compte Google.
  • En tant que site validateur participant, vous devez vous inscrire à la phase d'évaluation et fournir le jeton sur la même page que votre formulaire d'adresse e-mail.
  • L'utilisateur doit sélectionner son adresse e-mail dans le menu déroulant de saisie automatique ou de saisie semi-automatique.

    • Si l'utilisateur a déjà saisi une adresse e-mail dans le champ, elle sera proposée à l'aide de la saisie semi-automatique.
    • Si l'utilisateur a ajouté son adresse e-mail à l'aide des paramètres Chrome "Saisie automatique et mots de passe" (chrome://settings/autofill), elle sera proposée à l'aide de la saisie automatique.

  • La première fois qu'un utilisateur fournit une adresse e-mail pour validation, il voit une invite d'autorisation. Cela ne se produit qu'une seule fois par adresse e-mail.

Une fois que l'utilisateur a cette session active dans son navigateur, il peut démarrer le processus :

  1. Dans un formulaire comportant un champ d'adresse e-mail, l'utilisateur sélectionne son adresse e-mail dans le menu déroulant de saisie semi-automatique. Le site validateur fournit un champ masqué dans le formulaire avec un nonce par instance pour valider cette requête.
  2. Le navigateur récupère ensuite l'enregistrement DNS de validation de l'adresse e-mail pour le domaine de l'adresse e-mail. Cela redirige le navigateur vers l'émetteur. L'émetteur confirme ensuite qu'il dispose d'une session active pour cette adresse e-mail.

  3. L'émetteur fournit ensuite son jeton de validation de l'adresse e-mail (EVT) pour l'adresse. Le navigateur combine cela dans un jeton JWT lié à une clé avec l'EVT, l'origine du site et le nonce du formulaire de saisie.

  4. Lorsque le formulaire est envoyé, le package EVT est ajouté au champ masqué et envoyé au site.

  5. Le site validateur vérifie ensuite chacun de ces détails : l'adresse e-mail attendue, le nonce et les signatures du navigateur et de l'émetteur.

  6. L'utilisateur voit une petite notification l'informant que son fournisseur de messagerie a validé son adresse.

Ce processus permet au site validateur de confirmer que l'adresse e-mail est valide et appartient à l'utilisateur actuel, ce qui signifie que le site peut éviter d'envoyer un e-mail de validation.

Les utilisateurs peuvent gérer leurs adresses e-mail validées sous Paramètres > Saisie automatique et mots de passe > Coordonnées > Adresse e-mail validée (ou ouvrir chrome://settings/contactInfo).

Points à prendre en compte pour les cas d'utilisation

La validation de l'adresse e-mail est une amélioration progressive de votre flux existant qui évite à l'utilisateur de quitter votre site pour récupérer un mot de passe à usage unique ou cliquer sur un lien. Les sites peuvent ajouter les champs de validation de l'adresse e-mail à tous les formulaires pertinents, tels que les connexions, les inscriptions à la newsletter, la création de compte et la récupération de mot de passe. L'EVP ne se déclenche que si le navigateur le prend en charge. Si aucun code n'est reçu lors de l'envoi ou si l'une des étapes de validation échoue, vous pouvez revenir à votre flux de confirmation d'adresse e-mail par défaut. Cela signifie également qu'il n'y a pas de détection de fonctionnalités pour l'API. Le site validateur traite l'EVT comme facultatif et le traite s'il est présent dans la requête.

La validation de l'adresse e-mail confirme que l'utilisateur dispose d'une session active auprès du fournisseur de son adresse e-mail. Elle ne vérifie pas que votre e-mail est parvenu à l'utilisateur. Vous pouvez toujours envoyer des e-mails de bienvenue ou d'intégration existants, et vous pouvez ou devez inviter l'utilisateur à vérifier ses paramètres de spam.

Implémenter le site validateur

Pour plus d'informations, vous pouvez consulter le code de démonstration de bout en bout et vous reporter aux étapes de validation dans les propositions d'API Email Verification et de protocole de validation de l'adresse e-mail.

Configurer les champs de formulaire

Assurez-vous que les champs de votre formulaire comportent les attributs appropriés :

<input
  name="email-address"
  type="email"
  autocomplete="email">
<input
  type="hidden"
  name="token"
  nonce="rAnD0m-VaLuE"
  autocomplete="email-verification-token">

Définissez les attributs type et autocomplete de l'entrée email sur email pour permettre au navigateur de proposer la saisie semi-automatique pour l'adresse e-mail.

Le nouveau champ hidden sera renseigné avec le jeton de validation de l'adresse e-mail lors de l'envoi du formulaire. Les attributs nécessaires sont les suivants :

  • Définissez type="hidden" car ce champ ne nécessite pas d'entrée utilisateur.
  • Définissez nonce="rAnD0m-VaLuE". Le site doit fournir un nonce unique lié à la session pour valider l'envoi du formulaire.
  • Définissez autocomplete="email-verification-token". Le navigateur utilise cet attribut pour identifier le champ à renseigner.

Validez les éléments de votre formulaire en cochant le panneau "Réseau" dans les outils de développement. Lorsque vous sélectionnez une adresse e-mail, vous voyez le navigateur déclencher le DNS et les requêtes de recherche de compte suivantes pour le fournisseur de messagerie et l'émetteur. Il s'agit de requêtes de navigateur internes. Votre site ne reçoit rien tant que le formulaire n'est pas envoyé.

Valider l'EVT

La validation de chaque composant du package EVT comporte cinq étapes.

  1. Analyser le jeton
  2. Valider les valeurs attendues
  3. Valider la liaison de clé
  4. Valider l'enregistrement DNS
  5. Découvrir l'émetteur et valider la signature EVT

1. Analyser le jeton

Les données brutes de l'envoi du formulaire contiennent l'EVT et les revendications signées dans un jeton Web JSON de divulgation sélective (SD-JWT+KB) séparé par un tilde (~ caractère). Vous devrez les séparer et décoder les en-têtes et les charges utiles de signature et de chiffrement d'objets JavaScript (JOSE), par exemple à l'aide de jose pour Node.js.

Si example.com valide demo@gmail.com, la charge utile décodée ressemble à l'exemple suivant :

{
  "evtJwtDecodedPayload": {
    "cnf": {
      "jwk": {
        "crv": "Ed25519",
        "kty": "OKP",
        "x": "pUbLiCkEy123pUbLiCkEy123pUbLiCkEy123"
      }
    },
    "email": "demo@gmail.com",
    "email_verified": true,
    "iat": 1782911685,
    "iss": "https://accounts.google.com"
  },
  "kbJwtDecodedPayload": {
    "aud": "https://example.com",
    "iat": 1782911685,
    "nonce": "rAnDoM123rAnDoM123rAnDoM123rAnDoM123",
    "sd_hash": "hAsH456hAsH456hAsH456hAsH456hAsH456"
  }
}

2. Valider les valeurs attendues

Vérifiez que les valeurs de base de la charge utile correspondent aux valeurs que vous avez fournies :

  • Vérifiez que email_verified est défini sur true.
  • Vérifiez que email correspond à l'adresse e-mail fournie dans votre formulaire.
  • Vérifiez que nonce correspond au nonce fourni dans votre formulaire.
  • Vérifiez que aud correspond à l'origine de votre site.
  • Vérifiez que iat comporte un code temporel relativement récent, par exemple après le rendu du formulaire.

3. Valider la liaison de clé

Le navigateur crée une clé temporaire et éphémère pour la transaction afin de confirmer qu'il a signé le jeton. Extrayez cette clé de la revendication cnf (confirmation) dans l'EVT, puis utilisez-la pour valider le jeton JWT lié à la clé.

Calculez ensuite le hachage attendu et comparez-le à la revendication sd_hash. L'exemple Node.js suivant montre comment effectuer ce calcul :

const calculatedHash = createHash("sha256")
        .update(evtJwt + "~")
        .digest("base64url");

4. Valider l'enregistrement DNS

Vérifiez l'enregistrement DNS _email-verification pour le domaine de l'adresse e-mail. Par exemple, pour demo@gmail.com, interrogez l'enregistrement TXT _email-verification.gmail.com. Pour ce fournisseur, la requête renvoie l'emplacement du fournisseur de compte, à savoir accounts.google.com.

$ dig +short TXT _email-verification.gmail.com
"iss=accounts.google.com"

5. Découvrir l'émetteur et valider la signature EVT

Assurez-vous que l'émetteur diffuse la ressource /.well-known/email-verification, qui fournit les points de terminaison pour émettre le jeton, la clé Web JSON (JWK) pour le site et les algorithmes de signature compatibles.

$ curl https://accounts.google.com/.well-known/email-verification
{
  "issuance_endpoint": "https://accounts.google.com/gsi/email-verification/issue",
  "jwks_uri": "https://verifiablecredentials-pa.googleapis.com/.well-known/vc-public-jwks",
  "signing_alg_values_supported": ["EdDSA"]
}

Utilisez les JWK pour valider le jeton JWT EVT que vous avez extrait du jeton. La plupart des bibliothèques JOSE fournissent des fonctions pour gérer cette validation.

Si les cinq étapes aboutissent, vous avez validé l'adresse e-mail auprès du fournisseur. Dans le cas contraire, revenez à l'envoi d'un e-mail de confirmation à l'utilisateur conformément à votre flux normal.

Implémenter le service de fournisseur de messagerie et d'émetteur

Pour plus d'informations, vous pouvez consulter le code de démonstration du fournisseur de messagerie fictif et vous reporter aux étapes de l'émetteur dans les propositions d'API Email Verification et de protocole de validation de l'adresse e-mail.

En tant qu'émetteur, vous n'avez pas besoin de vous inscrire à la phase d'évaluation ni de fournir de jeton, car le comportement du navigateur est déclenché par le site de la partie de confiance. Vous devez simplement vous assurer que les points de terminaison attendus sont en place pour répondre à ces requêtes.

Configurer la découverte de l'émetteur

Pour permettre aux navigateurs de découvrir automatiquement vos points de terminaison de validation lorsqu'une adresse e-mail appartenant à votre domaine est sélectionnée, exposez votre configuration à l'aide du DNS et d'un point de terminaison HTTP .well-known.

Configurer l'enregistrement de délégué DNS

Configurez un enregistrement TXT DNS sur votre domaine de messagerie qui délègue l'autorité de validation à l'identifiant de votre émetteur. Ces identifiants peuvent utiliser le même domaine en fonction de votre infrastructure.

Format de l'enregistrement : _email-verification.<email-domain>

Exemple de fichier de zone :

_email-verification.example.com IN TXT "iss=accounts.issuer.example"

Héberger un point de terminaison .well-known/email-verification

Hébergez un fichier de métadonnées JSON sur votre domaine d'émetteur sous le chemin d'accès /.well-known/. Ce fichier décrit vos capacités d'émission et les algorithmes de signature cryptographique compatibles avec votre infrastructure.

Point de terminaison : https://<issuer-domain>/.well-known/email-verification

Exemple de réponse :

{
  "issuance_endpoint": "https://accounts.issuer.example/email-verification/issuance",
  "jwks_uri": "https://accounts.issuer.example/.well-known/vc-public-jwks",
  "signing_alg_values_supported": ["EdDSA", "ES256"]
}

Héberger un point de terminaison .well-known/web-identity

Une ressource JSON .well-known supplémentaire que vous avez peut-être déjà implémentée dans le cadre de l'API Federated Credentials (FedCM). Cela fournit des liens vers votre point de terminaison de compte et votre URL de connexion.

Point de terminaison : https://<domain>/.well-known/web-identity

Exemple de réponse :

{
  "accounts_endpoint": "https://accounts.issuer.example/accounts",
  "login_url": "https://accounts.issuer.example/login"
}

Utiliser un point de terminaison de compte

Le point de terminaison de compte de l'API FedCM fournit une liste des comptes connectés pour le moment. L'exemple suivant montre une réponse minimale. Pour en savoir plus, consultez le guide d'implémentation du fournisseur d'identité.

Point de terminaison : comme spécifié dans .well-known/web-identity

Voici un exemple de réponse :

{
  "accounts": [
    {
      "id": "demo-example",
      "name": "Demo User",
      "email": "demo@example.com",
      "given_name": "Demo"
    }
  ]
}

Intégrer l'API Login Status

L'utilisateur doit disposer d'une session active auprès du fournisseur, et vous devez signaler cela au navigateur avec l'API Login Status.

Lorsqu'un utilisateur se connecte ou se déconnecte, diffusez l'en-tête de réponse HTTP correspondant :

Set-Login: logged-in
Set-Login: logged-out

Vous pouvez également mettre à jour l'état à l'aide de JavaScript dans le contexte de votre application Web :

navigator.login.setStatus("logged-in");
navigator.login.setStatus("logged-out");

Gérer les requêtes d'émission

Votre issuance_endpoint reçoit une requête POST application/x-www-form-urlencoded contenant le request_token.

Les sections suivantes montrent le processus complet de gestion des requêtes d'émission.

1. Valider la requête d'émission

Analysez et validez les charges utiles entrantes du navigateur :

  • Méthode : POST
  • Validation de la session : validez les cookies propriétaires session/authentication de l'utilisateur transmis avec la requête pour vous assurer qu'un contexte d'identité actif et autorisé existe.
  • Validation des paramètres : extrayez le paramètre request_token (un jeton JWT signé généré par le navigateur). Vérifiez qu'il contient la clé publique éphémère attendue, l'e-mail cible, l'audience correcte et un code temporel valide.

Le jeton décodé doit se présenter comme suit :

{
  "decodedHeader": {
    "alg": "ES256",
    "typ": "JWT",
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "pUbLiCKeY123pUbLiCKeY123pUbLiCKeY123",
      "y": "pUbLiCKeY456pUbLiCKeY456pUbLiCKeY456"
    }
  },
  "decodedPayload": {
    "iss": "https://accounts.issuer.example",
    "sub": "demo@example.com",
    "email": "demo@example.com",
    "iat": 1780272000,
    "exp": 1780272300
  },
  "signature": "SIGnatURE-123_SIGnatURE-123_SIGnatURE-123"
}

2. Répondre avec un jeton

Une fois la session et le jeton de requête validés, générez un jeton JWT de divulgation sélective (SD-JWT) signé à l'aide de la charge utile :

{
  "iss": "https://accounts.issuer.example",
  "iat": 1780272000,
  "exp": 1780272300,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "pUbLiCKeY123pUbLiCKeY123pUbLiCKeY123",
      "y": "pUbLiCKeY456pUbLiCKeY456pUbLiCKeY456"
    }
  },
  "email": "demo@example.com",
  "email_verified": true
}

Signez la charge utile à l'aide de votre clé privée et de l'algorithme compatible. Par exemple, en utilisant jose dans Node.js :

const evtJwt = await new SignJWT(evtPayload)
   .setProtectedHeader({
     alg: "EdDSA",
     kid: PRIVATE_KEY_JWK.kid, // Key ID corresponding to our JWKS keys
     typ: "evt+jwt", // Standard Token Type for EVTs
   })
   .sign(privateKey);

 // Standard SD-JWT compatibility requires appending a trailing tilde "~"
 // to separate the signed token from the key binding section.
 const issuanceToken = `${evtJwt}~`;

Exemple de réponse de réussite (HTTP 200) :

{
  "issuance_token": "tOkEn123tOkEn123tOkEn123...~"
}

Points à prendre en compte pour la phase d'évaluation

Les phases d'évaluation sont des expériences visant à recueillir des commentaires. Votre contribution est donc essentielle si vous participez en tant que partie de confiance ou fournisseur d'identité. Pour signaler des problèmes, utilisez les dépôts GitHub suivants :

Si vous rencontrez des bugs dans l'implémentation Chrome, signalez-les au composant :

L'activation de la fonctionnalité de phase d'évaluation est contrôlée par réponse en fonction de l'inclusion du jeton OT. Cela signifie que vous disposez d'un contrôle précis si vous préférez limiter la fonctionnalité à une partie de vos utilisateurs. Par exemple, si vous disposez déjà d'un framework de test A/B, vous pouvez y intégrer la phase d'évaluation pour une population de test contrôlée. Vous pouvez également activer la fonctionnalité pour un groupe d'utilisateurs de test bêta ou d'aperçu anticipé. Dans ce cas, vérifiez l'adresse e-mail fournie avant d'émettre ou de valider le jeton.

Les phases d'évaluation sont également soumises à des limites de trafic afin de minimiser les sites qui s'appuient sur la fonctionnalité avant son lancement. L'API de l'émetteur est en cours de développement, et vous devez vous attendre à des modifications rétrocompatibles ainsi qu'à des mises à jour de l'expérience utilisateur Chrome.

Nous publierons d'autres mises à jour sur le blog ici et sur la evp-announce@chromium.org au fur et à mesure du développement.