字
字节笔记本
2026年6月18日
Easy2FA:无状态、可自部署的 TOTP 验证码工具
API中转
¥120
Easy2FA 是一个无状态、可自部署的 TOTP 验证码工具。它完全运行在浏览器端,没有后端、没有数据库,密钥通过 URL hash 传递,永远不会离开用户的设备。项目仓库地址:https://github.com/zeropl/2FA。
项目简介
Easy2FA(仓库名 2FA)由 zeropl 开发维护,是一个纯静态的 2FA 验证码生成器。它的核心思想是把每个账号变成一条可收藏、可分享的 URL,浏览器通过 Web Crypto 本地计算符合 RFC 6238 的 6 位 TOTP 码。仓库在 GitHub 上开源,采用 MIT 许可证。
核心特性
- 无状态单账号视图:粘贴密钥即可立即生成验证码,关闭标签页后不留任何数据。
- 多号看板:支持拖入
.txt/.md/.yaml链接文件,或扫描 Google Authenticator 导出二维码,一屏显示多个账号的实时验证码。 - 二维码导入与导出:可将现有二维码图片导入,也可把账号导出为
otpauth://二维码供手机验证器扫描。 - PWA 离线可用:可添加到主屏,无网络也能使用。
- 纯静态部署:仅由
index.html、support.js和vendor/组成,无需构建步骤,支持 Cloudflare Pages、Netlify、Vercel、GitHub Pages 或任意静态服务器。
技术栈
- 原生 JavaScript + React(vendoring):React 和 ReactDOM 已内置到
vendor/目录,不依赖外部 CDN。 - Web Crypto API:使用
crypto.subtle本地执行 HMAC 计算。 - TOTP 算法:遵循 RFC 6238,支持 SHA-1/256/512、自定义位数与周期。
- Service Worker:提供离线缓存,支持 PWA 安装。
部署指南
前置要求
- 一个支持 HTTPS 的静态托管服务(Web Crypto 需要安全上下文)。
- 本地测试时
localhost即可,但file://协议无法运行。
一键部署
项目提供三个一键部署按钮:
- Cloudflare Pages:Framework preset 选
None,Build command 留空,Output directory 填/。 - Netlify:Build command 留空,Publish directory 填
.。 - Vercel:Framework Preset 选
Other,Build 与 Output 均留空。
GitHub Pages
- 进入仓库 Settings → Pages。
- Source 选择 "Deploy from a branch",Branch 选
main,Folder 选/ (root)。 - 保存后约 1 分钟生效,访问地址为
https://<用户名>.github.io/2FA/。
本地开发
bash
npx serve .
# 或
python3 -m http.server 8000更新部署版本后,记得提升
sw.js里的CACHE版本号(如2fa-v3→2fa-v4),否则 Service Worker 会继续返回旧缓存。
快速开始
临时算一次验证码
- 打开部署后的页面。
- 在输入框粘贴 Base32 编码的 TOTP 密钥。
- 页面立即显示当前 6 位验证码及倒计时。
保存为书签链接
填写标签和密钥后,点击生成专属链接:
https://your-domain/#secret=YOUR_SECRET&label=acme-test
把这条链接加入浏览器书签,下次点击即可直接看到验证码。
多号看板
- 准备一个
.txt/.md/.yaml文件,每行一个 Easy2FA 链接。 - 把文件拖到页面上,或粘贴文件内容。
- 页面会以彩色网格展示所有账号的实时验证码。
- 看板数据仅保存在浏览器
localStorage,可随时一键清空。
使用示例
场景 1:个人测试号管理
为每个测试账号生成一条链接,存到浏览器的"测试号"书签文件夹:
https://zeropl.github.io/2FA/#secret=JBSWY3DPEHPK3PXP&label=stripe-test
点击书签即可查看当前验证码,无需安装验证器 App。
场景 2:临时分享给同事
把某条账号链接通过可信聊天工具发给同事,对方打开即可获得实时验证码。分享后建议及时轮换密钥。
场景 3:导入到手机验证器
在页面点击"显示二维码",扫描生成的 otpauth:// 二维码,即可把账号导入 Google Authenticator、Authy 等应用。
安全须知
Easy2FA 主要面向测试账号和一次性场景,在便利性与安全性之间做了明确取舍:
- 密钥位于 URL hash 中,会进入浏览器历史和书签;若开启浏览器云同步,也会同步到云端。
- 链接即密钥,请通过可信渠道分享,并在分享后及时轮换。
- 高价值账号建议使用硬件密钥或专业验证器 App。
- 必须使用 HTTPS(或
localhost),否则 Web Crypto 会拒绝工作。
项目链接
- GitHub 仓库:https://github.com/zeropl/2FA
- 在线演示:https://zeropl.github.io/2FA/
- 许可协议:MIT
分享: