logo NodeSeekbeta

跑在 Cloudflare Workers 上的 2FA 管理器,免费自托管,支持 20+ 格式互导

Google Authenticator 的云同步至今没有端到端加密,你的密钥在 Google 服务器上是可读的。Microsoft Authenticator 2025 年改为设备绑定模式,换手机第三方 OTP 直接丢失,iOS/Android 之间还不能互相恢复。Authy 强制云同步到别人的服务器。1Password 要年费。

如果你想要一个免费、自托管、数据完全由自己掌控的 2FA 方案,可以看看这个。


它是什么

一个跑在 Cloudflare Workers 上的 2FA 密钥管理器。没有服务器、没有数据库、没有月费。一键部署,打开浏览器就能用。

这个项目最初是为了解决自己的需求写的,自用了快一年,稳定没出过问题,才决定开源放出来。


主流方案的问题

Google Authenticator

  • 云同步没有端到端加密,密钥在 Google 服务器上可被读取
  • 不支持导出为文件,只能设备间扫码迁移
  • 没有桌面端,电脑上无法查看验证码

Microsoft Authenticator

Authy — 云同步到 Twilio 服务器,2024 年已发生数据泄露

1Password / Bitwarden Premium — 需要付费订阅


对比一览

痛点 主流方案 本项目
数据归属 存在厂商服务器上,平台可读取 AES-GCM 加密存储在你自己部署的 KV 里,平台无法读取明文
跨平台 Google/Microsoft Authenticator 无桌面端 浏览器打开就用,PWA 安装到任何设备
换机迁移 Google/Microsoft 迁移繁琐,部分 App 不支持导出 支持 20+ 种格式互导,一键搞定
导出自由 部分 App 不支持或格式有限 20+ 种格式,随时迁走
费用 1Password 年付,Bitwarden TOTP 需付费版 Cloudflare Workers 免费额度足够个人用
自动备份 多数没有 数据变更自动备份,保留最近 100 份
安全审计 闭源,信不信随你 MIT 开源,AES-GCM 256 位加密,代码随便审

核心亮点

零成本自托管 — 部署在 Cloudflare 全球 300+ 节点上,免费额度每天 10 万次请求,个人使用绰绰有余。不依赖任何第三方服务。

真正的跨平台 — 纯 Web 方案,手机/平板/电脑都是同一个入口。支持 PWA 安装到桌面,体验接近原生 App,且支持离线访问。

导入兼容性拉满 — 支持从 Google Authenticator(迁移二维码)、Aegis、2FAS、Bitwarden、LastPass、andOTP、Ente Auth、FreeOTP、Proton、WinAuth、Authenticator Pro 导入。换过来零门槛。

零锁定,随时离开 — 这一点很重要:如果有一天你不想用了,随时可以走。 导出功能覆盖 20+ 种格式,包括:

  • 通用格式:TXT(otpauth URI)、JSON、CSV、HTML
  • 直接导入其他 App:Aegis、2FAS、andOTP、FreeOTP/FreeOTP+、LastPass、Proton Authenticator、Authenticator Pro、Bitwarden Authenticator、Ente Auth、WinAuth
  • Google Authenticator:生成迁移二维码,手机扫一下就回去了
  • 加密导出:FreeOTP 加密 XML、TOTP Authenticator 加密格式

不做用户绑架。你的密钥始终是你的,用标准格式存储,想迁去哪个平台都是一次导出的事。

OTP API — 提供公开接口 /otp/YOUR_SECRET,方便脚本和自动化调用。这是多数 App 做不到的。

端到端加密 — 配置密钥后,所有数据 AES-GCM 256 位加密存储。即使 Cloudflare KV 被读取,没有密钥也是密文。


一键部署

Deploy to Cloudflare Workers

  1. 点击上方按钮,使用 GitHub 登录并授权
  2. 登录 Cloudflare 账户,点击 Deploy 等待部署完成(KV 存储自动创建)
  3. 打开 Cloudflare 给你的 Workers 链接,设置管理密码即可开始使用

不需要懂代码,三步搞定。


适合谁

  • 不想把 2FA 密钥交给第三方公司的人
  • 经常在电脑上需要输验证码的人
  • 想从 Google Authenticator 迁移出来但不知道迁去哪的人
  • 喜欢自托管、数据自治的开发者
  • 有自动化需求、需要 API 获取 OTP 的场景
  • 选择困难症:先用着,不满意随时导出到别的 App

GitHub: https://github.com/wuzf/2fa

在线体验(密码 2fa-Demo.): https://2fa-dev.wzf.workers.dev ⚠️ 公共演示环境,数据所有人共享,请勿导入真实密钥

如果觉得有用,欢迎去 GitHub 点个 Star,也欢迎提 Issue 和 PR。

  • 更新至v1.4.0

    版本变更历史:
    v1.0.0 (2025-06-07) — 架构基石

    • 将单体 worker 重构为分层模块化架构(api / otp / ui / utils)
    • 引入 Vitest 测试套件(17 个文件、598 条用例)
    • 配置 GitHub Actions CI/CD、Dependabot、ESLint、Prettier、Husky
    • 补齐开源社区文件(CONTRIBUTING、SECURITY、Issue 模板等)与完整文档(API、架构、部署)
    • 实现 PWA 前端(模块化脚本、样式、Service Worker)

    v1.1.0 — PC 端易用性 & 部署稳定性

    • feat:新增微软 Authenticator 导出工具
    • feat:PC 端支持剪贴板粘贴和拖拽识别二维码
    • fix:移除硬编码的 KV namespace ID,避免一键部署创建多余 KV
    • fix:禁止点击模态框外部关闭、修正 setup 错误处理
    • docs:README 增加粘贴/拖拽与版本升级指南

    v1.2.0 — 远程备份 & 系统设置

    • feat(webdav):WebDAV 同步(连接测试、备份推送、配置 API 与 UI 模态)
    • feat(s3):S3 兼容对象存储自动备份
    • feat(settings):系统设置面板(修改密码、JWT 过期时长、备份保留数)
    • feat(sync):支持多个 WebDAV / S3 备份目的地(取消 5 个上限)
    • feat(deploy):部署脚本自动识别并复用现有 KV namespace;上游同步时自动合并 wrangler 配置
    • feat(config):显式声明 SECRETS_KV 绑定
    • fix:加密密钥缺失时改为 fail-closed;修复同步错误处理;截断过长的 fetch 错误信息
    • style(ui):CSS 变量统一模态宽度、菜单顺序调整(工具→设置)、重命名"系统设置"
    • chore:升级 wrangler 至 ^4.78.0

    v1.3.0 — 导入能力 & 登录体验

    • feat(import):支持更多 JSON 导入格式
    • feat(ui):登录页增加密码可见性切换
    • fix(import):Base32 校验前剥除空格和分隔符;移除遗留导入 bundle,恢复 decrypt 流程
    • test:覆盖生成的 FreeOTP 运行时
    • docs:新增升级与故障排查说明

    v1.4.0 — 云盘同步 & 统一导出

    • feat(backup):新增 OneDrive、Google Drive 云盘同步
    • feat(backup):OAuth 授权完成后自动启用对应云盘目标
    • feat(backup):新增统一导出端点,支持格式偏好
    • refactor(backup):统一备份格式与索引结构
    • fix(export):离线或载荷过大时回落到本地导出
    • fix(release):在独立构建中嵌入 SW cache 版本号
    • feat(ui):密钥卡片响应式多列网格布局
  • 点个赞给大佬

  • 感觉可以啊,等会儿部署一个试试

  • 有这时间都已经部署完vaultwarden了

  • 收藏了

  • 感谢分享

  • @fscarmen #5
    活捉f佬,2fa是一个很大的痛点,刚好自己试了很久感觉可以就拿出来了

  • nb

  • 666

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72033位seeker

🎉欢迎新用户🎉