基于 Cloudflare Workers 的两步验证密钥管理系统。免费部署、全球加速、支持 PWA 离线使用。
主要特性: TOTP/HOTP 验证码自动生成 · 二维码扫描/图片识别/粘贴截图/拖拽图片添加密钥 · AES-GCM 256 位加密存储 · 从 Google Authenticator、Aegis、2FAS、Bitwarden 等应用批量导入 · 多格式导出(TXT/JSON/CSV/HTML/Google 迁移二维码) · 自动备份与还原 · 深色/浅色主题 · 响应式设计适配手机/平板/桌面
| 桌面端 | 平板端 | 手机端 |
|---|---|---|
![]() |
![]() |
![]() |
访问演示站点(密码 2fa-Demo.):https://2fa-dev.wzf.workers.dev
- 点击上方按钮,使用 GitHub 登录并授权
- 登录 Cloudflare 账户,点击 Deploy 等待部署完成(KV 存储自动创建)
- 打开 Cloudflare 给你的 Workers 链接,设置管理密码即可开始使用
部署后,在 Cloudflare Dashboard → Worker → Settings → Variables 中添加 Secret ENCRYPTION_KEY:
# 生成加密密钥(任选一种)
openssl rand -base64 32
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"不配置也可正常使用,但建议配置以加密保护 2FA 密钥数据。
一键部署会在你的 GitHub 账户下创建一个独立仓库(非 Fork),无法通过同步上游的方式获取更新。更新到最新版本的步骤:
- 备份数据(建议) — 正常操作不会丢失数据,但以防万一,建议先通过 📤 批量导出 或 🔄 还原配置 导出一份备份
- 删除 Worker — 在 Cloudflare Dashboard → Workers & Pages 中删除
2faWorker - 删除 GitHub 仓库 — 在 GitHub 删除一键部署时自动创建的
2fa仓库 - 重新一键部署 — 再次点击上方 Deploy 按钮,完成部署即为最新版本
⚠️ 请勿删除 Cloudflare 上的 KV 命名空间,你的密钥数据存储在 KV 中,重新部署后会自动关联���有数据。如果之前配置了ENCRYPTION_KEY,重新部署后需要在 Worker Settings 中重新添加相同的密钥。
点击右下角 ➕ 悬浮按钮:
- 扫二维码 — 摄像头扫描 2FA 二维码,自动填入
- 选择图片 — 上传二维码截图,自动识别
- 粘贴截图 — Ctrl+V 粘贴剪贴板中的二维码截图(适合无摄像头的 PC 用户)
- 拖拽图片 — 直接将二维码图片拖入弹窗,自动识别
- 手动添加 — 输入服务名称和 Base32 密钥(可展开高级设置调整位数/周期/算法)
- 复制验证码:直接点击验证码数字
- 管理密钥:点击卡片右上角 ⋯ → 编辑 / 删除 / 查看二维码
- 搜索:顶部搜索框按服务名或账户名实时搜索
- 排序:按添加时间或名称排序
- 主题:右下角 🌓 切换浅色/深色/跟随系统
点击悬浮按钮 → 📥 批量导入,支持文件导入或文本粘贴。
兼容格式:
| 来源 | 格式 |
|---|---|
| 通用 | otpauth:// URI 文本(TXT)、CSV、HTML |
| Google Authenticator | 迁移二维码(otpauth-migration://) |
| Aegis | JSON 导出文件 |
| 2FAS | .2fas 导出文件 |
| Bitwarden | JSON 导出文件 |
| LastPass Authenticator | JSON 导出文件 |
| andOTP | JSON 导出文件 |
| Ente Auth | 导出文件 |
点击悬浮按钮 → 📤 批量导出,支持 TXT、JSON、CSV、HTML 格式,以及生成 Google Authenticator 迁移二维码(可直接扫码导入)。
系统自动备份(数据变化后自动触发 + 每天定时检查),保留最近 100 个备份。
点击悬浮按钮 → 🔄 还原配置 查看备份列表、预览内容、还原或导出。
- iOS:Safari 打开 → 分享按钮 → 添加到主屏幕
- Android:Chrome 打开 → 菜单(⋮)→ 添加到主屏幕
安装后可像原生应用一样全屏使用,支持离线访问。
- 密码:PBKDF2-SHA256(100,000 次迭代)加盐哈希,JWT 存储在 HttpOnly + Secure + SameSite=Strict Cookie 中
- 数据加密:配置
ENCRYPTION_KEY后所有密钥和备份使用 AES-GCM 256 位加密 - 传输:全程 HTTPS,TLS 1.2+
- 隐私:OTP 在客户端生成,不收集使用数据,完全开源
- 登录有效期:30 天,活跃使用自动续期(剩余 < 7 天时自动延长 30 天)
无需登录,通过 URL 直接生成验证码:
https://your-worker.workers.dev/otp/YOUR_SECRET_KEY
https://your-worker.workers.dev/otp/YOUR_SECRET_KEY?digits=8&period=60
https://your-worker.workers.dev/otp/YOUR_SECRET_KEY?type=hotp&counter=5
参数:type(totp/hotp)、digits(6/8)、period(30/60/120)、algorithm(sha1/sha256/sha512)、counter(HOTP 用)
| 文档 | 说明 |
|---|---|
| 部署指南 | 手动部署、KV 配置、Secrets 管理 |
| API 参考 | 完整 API 端点文档 |
| 架构设计 | 系统架构与技术实现 |
| 开发指南 | 本地开发、测试、代码规范 |
| PWA 指南 | PWA 安装与离线功能 |
欢迎提交 Issue 和 Pull Request。开发相关请参考 开发指南。
如果这个项目对您有帮助,请给一个 ⭐
Made with ❤️ by wuzf


