MENU

Typecho 多用户二次认证插件

November 29, 2023 • Read: 2144 • PHP

前言

出于网站安全性的考虑,想在 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 动态码(令牌)进行校验,校验失败时会提示相应错误信息。

2023-11-29T13:16:28.webp

绑定 OTP 密钥

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

2023-11-29T13:20:57.webp

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

2023-11-29T13:55:12.webp

解绑 OTP 认证

绑定成功后再进入个人设置页面,可以校验六位验证码,可以进行解绑操作。
2023-11-29T13:26:13.webp

登录认证

插件开启后,后台登陆页面会增加一个动态码输入框,已绑定的后台用户在登陆时需要校验 OTP 动态码,未绑定的用户则不会校验,为空正常登录即可。

2023-11-29T13:28:09.webp

插件安装

去码云下载插件

  • 将压缩包中的文件夹Login2FA 上传至 typecho 插件目录 typecho/usr/plugins
  • 在插件管理页面启用插件 "Login2FA"

插件配置

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

2023-11-29T13:41:24.webp

Last Modified: February 1, 2024
Leave a Comment

9 Comments
  1. 优秀,typecho各种插件越来越丰富了

  2. 截图里面的二步验证器好像是 Authenticator Pro,这个我也在用,挺好用的;

    学到了,插件可以这样实现拒绝卸载,可以避免一些误操作 @(真棒)

    1. @电脑星人截图里是 Authenticator Pro ,不过不只是用作演示, Authenticator Pro 没有云同步,我用官方版的 Bitwarden 一步到位@(笑眼)

  3. 龙虾 龙虾

    大佬您好我发现了个问题,我用了Typecho后台美化模板JKAdmin,开启二步验证后,登录页面不显示OTP输入框,但是登录时有显示未输入OTP验证码,截图:https://pic.imgdb.cn/item/65a536fe871b83018aa7c695.jpg

    1. @龙虾看了一下这个模板,修改了 login 页面的 dom 结构,插件是以官方模板为标准做的,简单修改了一下挂载 input 框的方式,邮箱发你了,能显示出来,但体验不太好,只能你自己进一步调整了,因为后端模板太多了 适配不过来,优先以官方模板为准。

  4. 看透一切的打工人 看透一切的打工人

    在个人页面报错了,但不影响使用
    Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /typecho/usr/plugins/Login2FA/GoogleAuthenticator.php on line 112

    1. @看透一切的打工人这个警告是 PHP 8.2 的一个特性变更导致的语法弃用,8.2 版本中不会影响正常使用,只是会提示。这周有空我修复一下。

  5. 请问作者是否有可能支持 PassKey 通行密钥呢?

    1. @闻者通达PassKey 插件,论坛已经有了 https://forum.typecho.org/viewtopic.php?t=24984