一个 2FA 的小程序实现

国内某些安卓系统手机无法安装谷歌商店,以及需要科学上网,或者需要下载 Authenticator 的 APK 文件安装,才可以使用动态码。

并且我之前有使用过 otplib 写过一个基于命令行的动态码工具 (opens new window)的经验,所以复刻了一个 Authenticator 的小程序,支持 Authenticator 的导出二维码,以及扫描二维码添加动态码。

# 实现

UI 方面直接使用 Cursor AI 对话生成界面,但是使用的是 uniapp 的框架,所以需要更改一些代码。因为习惯 tailwind,所以使用一个启动模板 (opens new window)让 uniapp 支持 tailwind。生成式 AI 几乎帮我完成了 90% 的界面代码。

使用 otplib/browser 来实现 otp 的生成。

支持导入谷歌 Authenticator 的二维码是最浪费时间的部分,因为导出的信息是 URI 形式,需要使用 protobuf 解析出 secret 和 issuer 还有 label 信息, 要支持 protobuf 解析,需要使用 protobufjs,而且需要 static code 而不是 reflection .proto 文件。所以需要将 .proto 文件静态编译为 .js 文件,而且还要解决 js module 的引入问题,这里使用 protobufjs-cli (opens new window) 解决。

附上 github 仓库 (opens new window)

screenshot

可以扫码体验:

小程序二维码