Two Factor Sign In.zh CN - houyhlouis/LLMOJ GitHub Wiki

两步验证

简体中文 | English | Wiki 首页

每位用户都可以为自己的账号开启两步验证。输入正确的密码后,登录还需要以下任意一种:

第二步 用户需要
身份验证器验证码 身份验证器应用(Google Authenticator、Microsoft Authenticator、密码管理器等),每 30 秒显示一个 6 位验证码
通行密钥 设备的指纹、面容或屏幕锁,或安全密钥。通行密钥需要通过 HTTPS 访问本站(或 localhost),见 HTTPS
恢复码 首次开启时显示的 10 个一次性恢复码之一

在用户自己开启之前,所有账号的两步验证都是关闭的。不需要修改配置文件,也不需要重启。

开启

  1. 登录后打开用户菜单 → 编辑资料 → 安全,找到 两步验证。
  2. 选择其一或两者都设置:
    • 身份验证器应用 → 设置:用应用扫描二维码(或手动输入旁边显示的密钥),输入应用显示的 6 位验证码,然后选择 开启。
    • 通行密钥 → 添加通行密钥:可修改名称,然后在浏览器弹窗中确认。通行密钥只在添加时的网站地址有效:在 https://oj.example.com 添加的通行密钥不能用于其他域名或 IP 地址。
  3. 保存只显示一次的恢复码(下载或复制)。服务器只保存其哈希;生成新的恢复码 会替换全部旧恢复码。

移除最后一个身份验证器和通行密钥后,两步验证随之关闭,恢复码也会被删除。

登录

输入密码后,登录页会要求完成第二步。如果账号在本站有通行密钥且浏览器支持,会优先显示通行密钥;使用身份验证器验证码、使用恢复码 可以切换方式。每个验证码只能使用一次。一次登录中答错 5 次需要重新输入密码;15 分钟内失败 10 次后,该账号会暂时无法完成第二步验证。

通过邮件重置忘记的密码会修改密码,但登录前仍需完成第二步。

确认敏感操作

有些修改要求在本次登录会话的最近 10 分钟内输入过密码。否则会弹出 确认身份 对话框,要求输入密码(已开启两步验证时还需完成第二步),确认后再完成修改。无论是否开启两步验证,此规则对所有账号生效:

  • 修改自己的邮箱(总是需要)、密码(已开启两步验证时)和两步验证设置;
  • 用户管理员修改他人的密码、邮箱或两步验证;
  • 站点管理员修改用户权限和详细权限、站点管理 中的注册方式和 AI 设置,以及添加、删除评测机或重置评测机密钥。评测机 页面不再列出密钥:点击钥匙图标并确认身份后,一次只显示一个密钥,每次查看都会记入审计日志。

取消对话框不会做任何修改。

登录会话

登录会话连续 30 天未使用、或登录满 90 天后失效。站点管理员的会话失效得更早:连续 3 天未使用、或登录满 30 天。修改方法见 后端配置。

会话失效或在其他设备上被退出后,页面会提示 登录会话已结束 并提供 登录 按钮,而不是悄悄把你当作访客。

丢失手机、通行密钥和恢复码

站点管理员,或拥有“管理用户”权限的用户(不能对管理员账号这样做),打开该用户的 安全 页面并选择 关闭两步验证。之后该用户可仅用密码登录,并重新设置。此操作会记录在审计日志中。

管理说明

  • 身份验证器密钥使用 two-factor.key 加密。该文件创建在后端私有密钥目录(HYHOJ_AI_STATE_DIR,通常为 /opt/LLMOJ/data/ai),与 AI 的 master.key 放在一起;backup.sh 会备份此目录。恢复数据库备份时必须同时恢复对应的 two-factor.key:缺少它时,已开启用户的身份验证器验证码将无法使用(后端不会静默创建新密钥);他们的通行密钥和恢复码仍可使用,管理员也可以为他们关闭两步验证。
  • 升级工具会创建 user_two_factor 和 user_passkey 两张表。只要仍有账号开启了两步验证,它会拒绝回滚到不支持两步验证的版本,因为旧版本只凭密码就会让这些账号登录。请先为这些账号关闭两步验证,或修复新版本。
  • 通行密钥会校验浏览器报告的网站地址。使用反向代理时,公开访问地址必须是 HTTPS,见 HTTPS。