项目背景
2Fauth-Cloudflare 是我最近重点维护的项目。想法很直接:把双因素认证条目放到 Cloudflare Workers + D1 这套边缘环境里管理,Web、Android、浏览器扩展都走同一套 API,不依赖自己的服务器。
目前包含 Web 登录、TOTP/HOTP 条目、分组、用户角色、导入导出、加密备份,以及面向客户端的 /api/v1 Bearer Token API。
核心取舍
安全相关的实现我放在优先级最高的位置,没有商量:
- OTP secret 用 AES-GCM 加密后再写入 D1。
- Web 登录走 HttpOnly session cookie。
- API 客户端走 access token + refresh token。
- 登录侧加入风险控制,预留 Cloudflare Turnstile。
- 浏览器扩展的 CORS 用精确 origin 白名单,不做通配。
- 明文导出要谨慎,默认推荐加密备份。
这些设计确实让开发复杂了一些,但 2FA 管理器本来就不是那种“能跑就行”的项目。
为什么需要 API v1
一开始 Web UI 能解决基本使用问题。但要做 Android 客户端和浏览器扩展,继续依赖网页就说不通了。稳定的 /api/v1 让不同客户端只处理自己的体验,认证、权限、条目和验证码生成逻辑全留在 Worker 里。
目前常用的接口:
POST /api/v1/auth/loginPOST /api/v1/auth/refreshGET /api/v1/entriesPOST /api/v1/codes/batchPOST /api/v1/entries/:id/hotp
先把服务端契约稳住,移动端和扩展端迭代起来就顺多了。
自动化部署
项目接了 GitHub Actions,构建、D1 迁移、部署全部自动化。Cloudflare Workers 项目如果靠手动记步骤,早晚出错——配置、迁移版本、代码版本一多就容易对不上。
现在我的习惯是把部署流程写进仓库,不放在自己笔记里。换设备或过一段时间回来维护,打开仓库就能恢复上下文。