Email Verification API 服务端验证清单:audience、nonce、exp 缺一不可
2026/9/18 19:56:53 网站建设 项目流程

Email Verification API 服务端验证清单:audience、nonce、exp 缺一不可

【免费下载链接】email-verificationverified autofill项目地址: https://gitcode.com/GitHub_Trending/em/email-verification

Email Verification API(EVP,Email Verification Protocol)是一项让网站不发验证邮件、直接用密码学令牌验证邮箱所有权的浏览器新标准。本文给出一份服务端验证清单:收到令牌后,audiencenonceexp三项缺一不可,漏掉任何一项都可能让令牌被重放或跨站盗用。

📌 它解决什么问题?

传统邮箱验证要"发邮件 → 用户切到收件箱 → 抄回验证码",既费时间又容易被钓鱼。EVP 的思路是复用用户已登录邮箱服务的会话:浏览器直接向邮箱服务商(Issuer)申请一个签名令牌 EVT(Email Verification Token),再自动填入你的表单,服务端完成校验即可,全程无需人工验证码。

提案中的完整交互时序图可参考 README.md,浏览器端扩展与验证流程规范则定义在 index.bs 中。

🧩 三方模型:谁发令牌、谁验令牌?

角色身份职责
Verifier你的网站生成nonce、接收并提交表单、服务端验签
User Agent浏览器发现 Issuer、申请 EVT、把令牌绑定到表单
Issuer邮箱服务商验证登录态、签发带签名的 EVT

网站只需在表单里加一行隐藏输入框:

<input type="hidden" name="token" nonce="<?php generate_nonce() ?>" autocomplete="email-verification-token">

其中nonce必须由服务端生成——一个加密学上足够强的随机值,且每次页面渲染都唯一(index.bs#L101-L109)。浏览器会把你的域名(origin)和这个nonce一起"绑死"在令牌上,这就是 KB-JWT 键绑定(index.bs#L136)。

✅ 服务端验证清单:三步核心校验

表单提交后,服务端收到email+ 令牌两个字段。按规范 Verifier Processing Model 与 Replay Attacks,必须依次校验:

1️⃣ 校验audience:令牌是发给"我的"网站吗?

  • audience应等于你自己的 origin(如https://rp.example)。
  • 漏检后果:攻击者截获用户在你站上的令牌,原样投递到攻击者控制的站点,若受众校验缺失,令牌照样"看起来合法"。

2️⃣ 校验nonce:令牌对应"这次"表单吗?

  • nonce必须与本次页面渲染时服务端生成的那一个严格一致
  • 建议用后即焚:校验成功后立即从会话/缓存中删除,防止同一令牌被重复提交。
  • 漏检后果:同一令牌可无限重放,注册流程形同虚设。

3️⃣ 校验exp:令牌还"活着"吗?

  • exp(过期时间)声明必须未过期,校验时应带少量时钟偏差容忍,但窗口要小。
  • 漏检后果:历史截获的令牌永久有效,等于长期后门。

4️⃣ 附加校验:邮件地址一致性

从令牌中提取已验证的email,与表单里用户填的值做大小写不敏感比对,不一致即失败(index.bs#L212-L213)。别忘了令牌本身还需通过 Issuer 公钥验签(它是签名 SD-JWT),验签细节在 EVT Issuance 一节。

💡 一句话记忆:签名保真伪,audience 保站点,nonce 保这一次,exp 保时间,email 保人

🛡️ 为什么这三项能防重放?

令牌通过键绑定(Key-Binding JWT)同时锚定了audience(你的站点)和nonce(本次表单),所以:

  • 换个网站用?audience不匹配 → 拒绝
  • 换次会话重放?nonce已被消费 → 拒绝
  • 过段时间再交?exp过期 → 拒绝

这正是规范在安全章节明确要求 Verifier "MUST verify" 的三项(index.bs#L233-L237)。

🪜 优雅降级:不支持的浏览器怎么办?

浏览器不支持或邮箱服务商未接入时,隐藏输入框就是空的——此时静默回退到传统验证码流程即可,无需任何报错。这也是 EVP 的设计目标之一:渐进增强、零行为破坏(README.md)。想本地体验完整流程,可参照 HOWTO.md 中的 Chrome 开启步骤。

📚 延伸阅读

  • 提案背景与生态分析:README.md
  • 规范全文(HTML 扩展、浏览器处理模型、验证模型):index.bs
  • 浏览器端手动测试指南:HOWTO.md
  • 贡献与讨论入口:CONTRIBUTING.md、QUESTIONNAIRE.md

【免费下载链接】email-verificationverified autofill项目地址: https://gitcode.com/GitHub_Trending/em/email-verification

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询