前言
出于网站安全性的考虑,想在 Typecho 管理后台登录时加一个基于 OTP 的多因素认证功能,网上找了半天没有合适的扩展,唯一找到的一个扩展还不支持多用户,于是就自己写了一个。
- 依赖要求:Typecho 1.2.0+
- 特点:界面简洁、支持多用户
更新记录
2024-02-01
- 解决所有表单都添加 otp 输入框的bug
2024-01-24
- 修复 PHP 8.2 + 语法不兼容的错误提示
Deprecated: Using ${var} in strings is deprecated, use {$var} - 调整 OTP 动态码 input 框的挂载方式,尽量兼容更多后台模板
使用说明
插件开启后,在登录页面会多一个动态码输入框,需要输入账户密码时同时输入OTP 动态码(令牌)进行校验,校验失败时会提示相应错误信息。

绑定 OTP 密钥
在个人设置页面,使用身份验证器扫码或手动绑定,扫描后输入六位动态码进行验证。
绑定成功后密钥固定不再变化,未绑定时每次加载个人页面随机生成密钥(若怀疑密钥已泄露不安全,则解绑后重新绑定即可)。

otpauth 信息中包含站点名称、当前用户名称,扫码添加后效果如下:

解绑 OTP 认证
绑定成功后再进入个人设置页面,可以校验六位验证码,可以进行解绑操作。
登录认证
插件开启后,后台登陆页面会增加一个动态码输入框,已绑定的后台用户在登陆时需要校验 OTP 动态码,未绑定的用户则不会校验,为空正常登录即可。

插件安装
- 将压缩包中的文件夹
Login2FA上传至 typecho 插件目录typecho/usr/plugins - 在插件管理页面启用插件 "Login2FA"
插件配置
第一个是 OTP 认证码的时间窗口期,主要用于解决客户端和服务器时间戳不一致的问题。
第二个为一个防呆设计,因为 Typecho 插件卸载后插件的所有数据都将删除,这就会导致所有人的 OTP 密钥全部丢失,即使重新开启插件也无法恢复,为了防止不小心点到禁用按钮,需要在设置页面改为确认卸载后才允许卸载插件。
