The Copenhagen Book

密码重置

概述

密码重置的常见方法是使用用户的电子邮件地址。用户输入他们的电子邮件,如果电子邮件有效,则会向邮箱发送密码重置链接。这要求每个用户都有一个唯一的电子邮件地址——请参阅电子邮件验证指南。

在发送重置链接之前,电子邮件不需要经过验证。如果用户重置了密码,您甚至可以将其电子邮件地址标记为已验证。

当用户重置密码时,使与用户关联的所有现有会话失效。

本页仅涵盖密码重置链接,因为这是最常见的方法。

密码重置链接

密码重置需要两个页面。首先是用户输入电子邮件地址的页面。

https://example.com/reset-password

接下来是实际的密码重置表单,用户在此输入新密码。此链接会发送到用户的邮箱。密码重置令牌作为 URL 路径的一部分包含在内。

https://example.com/reset-password/<TOKEN>

令牌的有效期应为大约一小时,最多不超过 24 小时。在发送新令牌时使现有令牌失效,或者如果已存在有效令牌,则重用它。建议在存储令牌前使用 SHA-256 对其进行哈希。

令牌必须是一次性的。当用户通过表单发送有效密码时,删除该令牌。

确保为包含令牌的任何路径设置 Referrer Policy 标签为 strict-origin(或等效值),以保护令牌免受引用者泄漏。

如果用户已实施多因素认证,例如通过身份验证器应用或 WebAuthn,在输入新密码之前应提示用户使用第二因素进行身份验证。

错误处理

如果电子邮件无效,可以告诉用户电子邮件无效,或者保持消息模糊(例如,“如果账户存在,我们将发送重置邮件”)。这取决于您是否希望电子邮件的有效性公开或保密。有关更多信息,请参阅密码认证指南中的错误处理

限流

任何可以发送电子邮件的端点都应实施严格的限流。如有必要,使用 Captcha。