ByteNoteByteNote

字节笔记本

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.htmlsupport.jsvendor/ 组成,无需构建步骤,支持 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

  1. 进入仓库 Settings → Pages
  2. Source 选择 "Deploy from a branch",Branch 选 main,Folder 选 / (root)
  3. 保存后约 1 分钟生效,访问地址为 https://<用户名>.github.io/2FA/

本地开发

bash
npx serve .
# 或
python3 -m http.server 8000

更新部署版本后,记得提升 sw.js 里的 CACHE 版本号(如 2fa-v32fa-v4),否则 Service Worker 会继续返回旧缓存。

快速开始

临时算一次验证码

  1. 打开部署后的页面。
  2. 在输入框粘贴 Base32 编码的 TOTP 密钥。
  3. 页面立即显示当前 6 位验证码及倒计时。

保存为书签链接

填写标签和密钥后,点击生成专属链接:

https://your-domain/#secret=YOUR_SECRET&label=acme-test

把这条链接加入浏览器书签,下次点击即可直接看到验证码。

多号看板

  1. 准备一个 .txt / .md / .yaml 文件,每行一个 Easy2FA 链接。
  2. 把文件拖到页面上,或粘贴文件内容。
  3. 页面会以彩色网格展示所有账号的实时验证码。
  4. 看板数据仅保存在浏览器 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 会拒绝工作。

项目链接

分享: