身份验证与两步验证(2FA)设置指南:绑定 TOTP 验证器、保管恢复码与撤销异地登录会话
WAthink 为 Web 应用提供标准、安全的会话登录。它覆盖你预期的一切 — 登录、注册、登出与密码重置 — 以及登录后创建或切换工作区的步骤。在此基础上,WAthink 还提供基于身份验证器应用的两步验证(2FA)、用于强制启用 2FA 的管理员策略,以及每个密码字段上的显示 / 隐藏切换。
本篇内容
概览
WAthink 为 Web 应用提供标准、安全的会话登录。它覆盖你预期的一切 — 登录、注册、登出与密码重置 — 以及登录后创建或切换工作区的步骤。在此基础上,WAthink 还提供基于身份验证器应用的两步验证(2FA)、用于强制启用 2FA 的管理员策略,以及每个密码字段上的显示 / 隐藏切换。
密码使用 bcrypt 存储,这是一种强单向哈希 — 从不以可读形式保存,应用也从不把它们回传。
注册流程
注册是一个分步引导流程,让新操作者不会落到一个空仪表板上。先创建账号,然后引导用户创建工作区,并可选地选择套餐。
- 第 1 步 — 账号。姓名、邮箱、密码(至少 8 个字符,需输入两次确认),以及接受条款的复选框。邮箱不能已被使用。如果管理员在 Admin → Settings → General 下开启了 Auto-verify email,账号会立即验证;否则用户会进入通常的邮箱验证页面。
- 第 2 步 — 工作区。新用户为自己的第一个工作区命名。它从管理员选择的默认套餐开始;如果默认是免费套餐,试用倒计时随即开始。
- 第 3 步 — 套餐 / 积分。可选的购买积分包步骤 — 可以跳过,之后从钱包再回来购买。
推荐(Referrals)在注册期间被追踪:如果用户通过推荐链接进入,推荐人获得积分。你不能推荐自己,同一次推荐也不能重复计数。
注意:平台员工(Super Admin、Admin、Platform Support、Auditor)完全跳过工作区步骤。登录后他们直接进入管理区域,因为工作区是客户侧的概念。
登录与登出
登录会校验邮箱与密码。成功后,会话会刷新为新的 ID(防止会话固定攻击),并按角色把用户送到正确的位置:
- 平台员工 → 管理后台。
- 没有工作区的用户 → 创建工作区步骤。
- Agent / Viewer(客服 / 只读) → 团队收件箱(他们的主页 — 他们没有仪表板访问权限)。
- 其他所有用户 → 仪表板(或他们最初要去的页面)。
Remember me 选项让你在浏览器会话之间保持登录。登出会完全结束会话,因此旧会话永远无法被重用。
登录失败提示故意含糊。邮箱错误和密码错误都显示相同的「凭据不匹配」提示,因此表单永远不会暴露某个邮箱是否已注册。
密码重置
忘记密码流程始终回复相同的中性提示 — 「如果该邮箱存在,我们已发送密码重置链接」— 无论邮箱是否在系统中,因此无法用它来探测哪些邮箱拥有账号。重置链接仅能使用一次,并在一段时间后过期;使用它会设置新密码(安全存储),然后把用户送回登录页。
上线前:全新安装可能被配置为把邮件写入日志文件而不是真正发送 — 这意味着重置链接会落在日志里,而无法送达用户。请配置真实的邮件服务,确保重置链接正常送达,而不是留在日志文件中。
两步验证(TOTP)
WAthink 内置基于标准 TOTP 方法(RFC 6238)的两步验证系统 — 与所有主流身份验证器应用使用相同方式,因此 Google Authenticator、1Password、Authy 等均可使用。它会显示二维码供扫描,然后校验你的应用生成的 6 位验证码(每 30 秒变化一次)。它允许两侧各一个验证码的时间漂移,因此即使手机时钟略有偏差也不会被锁在外面。
用户在 Settings → Security 中开启 2FA:
- 启用 — 应用显示二维码;输入当前验证码以确认。只有当验证码校验成功后,2FA 才会真正开启。
- 停用 — 必须重新输入账号密码,之后 2FA 才会关闭,存储的密钥与恢复码会被清除。
每一次启用、停用与失败尝试都会记录在安全审计日志中,包括操作者、工作区、IP 地址与浏览器。
2FA 数据如何存储
两件敏感数据 — 身份验证器密钥与恢复码 — 始终加密存储,绝不以可读形式保存:
| 存储内容 | 保护方式 |
|---|---|
| 2FA 是否开启 | 明文开 / 关标记 |
| 身份验证器密钥(用于校验验证码) | 加密 |
| 一次性恢复码 | 加密 |
| 2FA 确认时间 | 明文日期 / 时间 |
强制两步验证(管理员策略)
平台所有者可以在 Admin → Security 中强制要求 2FA。受策略覆盖但尚未设置 2FA 的用户,会被送到安全设置页面完成设置后才能继续。共有三个开关:
| 策略 | 对谁强制要求 2FA |
|---|---|
| 对所有用户强制要求 2FA | 每一位已登录用户 |
| 对管理员强制要求 2FA | 拥有管理员级角色的用户 |
| 对所有者强制要求 2FA | 至少拥有一个工作区的用户 |
登录、登出、注册、密码、邮箱验证与 2FA 设置页面始终保持可达,因此用户总能进入注册 2FA 的页面。管理员的 Security 仪表板还会显示实时的 2FA 覆盖率 — 已确认 2FA 的管理员用户百分比。
建议:对任何正式部署,请在 Admin → Security 下开启 Require 2FA for admins(最好连 for owners 也开启)。管理员与所有者账号可以访问计费、消息发送以及其他工作区的数据 — 它们是价值最高的目标,不应只依赖密码。
会话管理
会话在服务器端跟踪。除登录与登出外,WAthink 还让操作者与管理员直接控制活动会话:
- 按用户(Settings → Security):登出单个设备,或「撤销所有其他会话」以登出除当前设备外的所有设备。这里不能登出当前会话 — 请使用 Logout。
- 平台范围(Admin → Security,仅限 Super Admin):一个「撤销所有会话」操作会登出所有用户的所有位置,并强制所有人重新登录。
相关平台策略 — 会话超时、同时登录设备数上限、反复登录失败后锁定账号,以及是否提供 Remember me — 都在 Admin → Security 页面设置。
通用密码显示
应用中每个密码字段都会自动获得显示 / 隐藏的眼睛按钮 — 登录与注册表单、安全选项卡、管理员支付网关凭据字段以及 API 密钥输入框都有,包括展开某个区域后才出现的字段。显示完全在你的浏览器中完成;值不会被发送到任何地方,也不会写入日志。
模板作者还可以通过添加 data-reveal 把眼睛按钮强制加到非密码字段上,或用 data-no-reveal 从字段上隐藏它。