前言
出于网站安全性的考虑,想在 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 密钥全部丢失,即使重新开启插件也无法恢复,为了防止不小心点到禁用按钮,需要在设置页面改为确认卸载后才允许卸载插件。
优秀,typecho各种插件越来越丰富了
截图里面的二步验证器好像是 Authenticator Pro,这个我也在用,挺好用的;
学到了,插件可以这样实现拒绝卸载,可以避免一些误操作 @(真棒)
截图里是 Authenticator Pro ,不过不只是用作演示, Authenticator Pro 没有云同步,我用官方版的 Bitwarden 一步到位@(笑眼)
大佬您好我发现了个问题,我用了Typecho后台美化模板JKAdmin,开启二步验证后,登录页面不显示OTP输入框,但是登录时有显示未输入OTP验证码,截图:https://pic.imgdb.cn/item/65a536fe871b83018aa7c695.jpg
看了一下这个模板,修改了 login 页面的 dom 结构,插件是以官方模板为标准做的,简单修改了一下挂载 input 框的方式,邮箱发你了,能显示出来,但体验不太好,只能你自己进一步调整了,因为后端模板太多了 适配不过来,优先以官方模板为准。
在个人页面报错了,但不影响使用
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /typecho/usr/plugins/Login2FA/GoogleAuthenticator.php on line 112
这个警告是 PHP 8.2 的一个特性变更导致的语法弃用,8.2 版本中不会影响正常使用,只是会提示。这周有空我修复一下。
请问作者是否有可能支持 PassKey 通行密钥呢?
PassKey 插件,论坛已经有了 https://forum.typecho.org/viewtopic.php?t=24984
太棒了!