邮箱验证 API 是一项提案,旨在让浏览器能够直接与邮件服务提供商通信,以验证用户是否拥有该电子邮件地址。用户输入电子邮件地址并提交表单后,网站会使用提供商验证浏览器发送的已签名电子邮件验证令牌,而无需发送电子邮件或中断用户流程。
在注册、登录、结账、订阅简报或账号恢复期间收集电子邮件地址时,网站通常会确认提交表单的人员是否控制该地址。现有的验证方法要求用户离开您的网站,切换应用以查看收件箱,复制一次性密码或点击验证链接。这种中断会增加人工用户和自动代理的流失率和会话放弃率。用户在使用现有验证方法时经常会遇到问题,例如电子邮件延迟、链接过期或代码无法识别。
邮箱验证功能可作为对现有流程的渐进增强:
- 无中断:验证在后台进行,用户 填写表单时不会受到影响。
- 无需进行功能检测:网站在其表单中添加电子邮件输入和隐藏 令牌输入。如果浏览器或提供商不支持邮箱验证,或者验证失败,网站会回退到其默认的电子邮件确认流程。
- 最大限度地降低网络钓鱼风险:无需复制任何代码,也不会 将用户发送到虚假网站。
实用链接
您可以在演示中测试该流程:
源试用注意事项
源试用是收集反馈的实验,因此,如果您以依赖方或身份提供商的身份参与,您的反馈至关重要。如需报告问题,请使用以下 GitHub 代码库:
- 浏览器邮箱验证 API:WICG/email-verification
- 邮箱验证协议:dickhardt/email-verification
如果您在 Chrome 实现中遇到 bug,请在以下组件中提交问题:
您可以通过添加源试用令牌,以每个响应为基础控制源试用功能。这样,您就可以将该功能限制为特定用户群体,例如 A/B 测试群体。或者,如果您有 Beta 版测试或早期预览版用户群组,您可能希望或需要为他们启用该功能。在这种情况下,请先对照提供的电子邮件地址进行检查,然后再颁发或验证令牌。
源试用还具有流量限制,以最大限度地减少网站在发布前对该功能的依赖。颁发者 API 正在开发中,您应该会看到向后不兼容的更改以及 Chrome UX 的更新。
随着开发工作的推进,请关注此处的博客和 evp-announce@chromium.org 邮件列表,了解更多更新。
邮箱验证流程
以下部分介绍了使用邮箱验证 API 时的关键术语和协议步骤。
关键术语
电子邮件验证 API 的关键术语包括:
- 验证方:收集电子邮件地址并希望验证该地址的网站 。验证方也称为依赖方。
- 邮件服务提供商:提供用户电子邮件地址的服务,例如
gmail.com。 - 颁发者:管理用户电子邮件账号的服务,例如
accounts.google.com。颁发者也称为身份 提供商。
在某些情况下,邮件服务提供商和颁发者在同一网域中运行。不过,务必区分两者,因为电子邮件验证 API 使用浏览器中与身份提供商的活跃会话作为验证方法。例如,如需验证 example@gmail.com,用户必须在同一浏览器中使用该账号登录 google.com。
协议流程
- 表单呈现:依赖方提供一个 HTML 表单,其中包含
<input type="email">和一个隐藏输入,该输入标有autocomplete="email-verification-token"和每个实例唯一的nonce。 - 电子邮件输入:当用户输入电子邮件地址(通过选择
自动填充建议或通过输入或粘贴并退出字段
(
blur))时,浏览器会在后台触发验证。 - 发现和会话:浏览器查询
_email-verification.<email-domain>的 DNS TXT 记录,以发现提供商的授权 颁发者来源,然后检查用户是否使用 颁发者的.well-known/web-identity配置和 FedCM 账号 端点拥有活跃会话。如果网域未发布 EVP 记录或不存在活跃会话,浏览器会停止验证,而不会提示用户。 - 令牌颁发:浏览器从
.well-known/email-verification中发现提供商的issuance_endpoint,创建临时密钥对,并 使用 HTTP 消息签名 (RFC 9421) 发送 HTTPPOST请求,其中包含 颁发者的第一方会话 Cookie 和目标电子邮件地址,以接收 已签名的邮箱验证令牌 (EVT)。 - 密钥绑定和提交:浏览器将已签名的
EVT绑定到密钥绑定 JWT (KB-JWT) 内的 依赖方来源和表单nonce, 并显示一条小通知,告知用户其电子邮件 提供商已验证其地址。当用户提交表单时,Chrome 会使用组合令牌 (<EVT>~<KB-JWT>) 填充隐藏输入。 - 验证声明和 KB:依赖方服务器解析
<EVT>~<KB-JWT>令牌,验证预期声明(email、email_verified、aud、nonce、iat和exp),并根据cnf.jwk中的临时公钥验证密钥 绑定签名。 - DNS 和公钥:依赖方查询
_email-verification.<email-domain>DNS TXT 记录以确认其与 令牌的iss声明匹配,然后从jwks_uri中提取颁发者的.well-known/email-verification元数据和公钥。 - 验证 EVT 并完成:依赖方使用提供商的公开
JWKS验证颁发者的EVT签名。如果未收到任何令牌或任何验证步骤失败,网站会回退到其现有的电子邮件确认流程。
用户首次验证电子邮件地址时,Chrome 会在请求令牌之前显示权限提示(桌面设备上显示对话框,Android 设备上显示底部动作条)。如果获得授权,系统会记住每个电子邮件地址在参与网站中的此权限。
Chrome 浏览器设置
用户可以管理其已验证的电子邮件地址:
- 在桌面设备上,依次点击设置 > 自动填充和密码 > 联系信息 > 已验证的电子邮件地址 (或打开
chrome://settings/contactInfo) - 在 Android 设备上,依次点击设置 > 地址等 > 已验证的电子邮件地址
用户可以完全停用该功能,也可以管理各个已验证的电子邮件地址。
应用场景注意事项
邮箱验证功能可作为对现有 flow 的渐进增强,用户无需离开您的网站即可检索动态密码或点击链接。网站可以将邮箱验证字段添加到所有相关表单,例如登录、简报注册、账号创建和密码恢复。EVP 仅在浏览器支持时触发。如果在提交时未收到任何代码或任何验证步骤失败,您可以回退到默认的电子邮件确认流程。这也意味着 API 没有功能检测;验证方网站将 EVT 视为可选,如果请求中存在 EVT,则会对其进行处理。
电子邮件验证可确认用户与其电子邮件地址的提供商拥有活跃会话, 但不会验证您的电子邮件是否已送达用户。您可能仍希望发送现有的欢迎电子邮件或入职电子邮件,并且可能希望或需要提示用户检查其垃圾邮件设置。