用 Tauri 打造一款轻量的 Mac 2FA 验证器

AI摘要
【知识分享】本文介绍一款面向macOS的离线TOTP客户端2FA Authenticator,基于Tauri 2、Rust和React构建。文章说明其核心功能包括本地生成验证码、支持SHA-1/256/512算法、可配置位数与周期,并阐述TOTP算法原理及本地文件存储的安全边界。内容属于技术工具介绍,无违规风险。

一款离线运行、开箱即用的 macOS TOTP 客户端:2FA Authenticator

两步验证已经成为开发者和普通用户保护账户的基础手段。但在实际使用中,验证码工具往往有两个极端:要么依赖云同步和账户体系,要么功能复杂、启动缓慢。2FA Authenticator 想解决的正是中间地带的需求——在 Mac 上提供一个足够轻量、清晰且完全离线的一次性验证码客户端。

![2FA Authenticator 界面示意]
用 Tauri 打造一款轻量的 Mac 2FA 验证器

它解决了什么问题?

当 GitHub、Google、Notion、AWS 等服务启用两步验证后,用户通常需要频繁查看 6 位验证码。2FA Authenticator 将这些验证码集中到一个原生感的 macOS 界面中:选中账户、复制验证码、完成登录。

它适合以下场景:

  • 在 Mac 上管理开发与工作账户的 TOTP 验证码
  • 从服务商提供的 otpauth:// 链接快速导入账户
  • 不希望验证码依赖网络、云端同步或第三方账号
  • 希望验证码界面保持简洁,只做一件事

核心功能

离线 TOTP 生成

应用实现了 RFC 6238 定义的基于时间的一次性密码(TOTP)算法。验证码完全在本机计算,不需要网络请求,也不会上传到服务器。

支持:

  • SHA-1、SHA-256 与 SHA-512
  • 6 位或 8 位验证码
  • 可配置的验证码周期(默认 30 秒)
  • 实时倒计时与自动刷新

两种添加方式

用户可以手动输入服务名、账户名和 Base32 密钥,也可以直接粘贴服务商提供的 otpauth://totp/... 链接。后者特别适合从密码管理器或服务后台迁移。

一键复制

验证码以大字号显示,点击“复制验证码”即可写入剪贴板。倒计时进度条会提示验证码何时刷新,减少在过期边缘提交验证码的情况。

原生 macOS 应用体验

应用以 .app 形式打包,可直接拖入“应用程序”目录运行。当前发布包面向 Apple Silicon(M 系列)Mac,最低支持 macOS 13。

技术选型:为什么是 Tauri?

这个客户端采用 Tauri 2 + React + Rust 构建。

前端使用 React 实现账户列表、添加弹窗、倒计时和复制交互;后端则由 Rust 承担账户保存与 TOTP 计算。这个组合的好处是界面开发效率高,同时将关键算法和本地数据逻辑留在可靠的原生侧。

React 界面
   │ invoke
   ▼
Tauri Command(Rust)
   ├── 读取/保存本地账户数据
   └── 计算 RFC 6238 TOTP 验证码

相比传统 Electron 桌面应用,Tauri 使用系统 WebView 和 Rust 二进制作为运行时,产物更小、内存占用更低。当前应用包约为 9 MB,适合作为常驻但不打扰用户的小工具。

TOTP 是如何工作的?

TOTP 的核心思想很简单:服务端和客户端持有同一份共享密钥,并使用当前 Unix 时间按固定周期计算验证码。

  1. 将当前时间除以周期(通常是 30 秒),得到计数器。
  2. 使用共享密钥对计数器执行 HMAC。
  3. 对 HMAC 结果动态截断,再取模得到 6 位或 8 位数字。

因此,只要设备时间准确,客户端无需联网也能生成与服务端一致的验证码。

共享密钥 + 当前时间
       │
       ▼
HMAC-SHA1 / SHA256 / SHA512
       │
       ▼
动态截断 + 取模
       │
       ▼
   123 456

隐私与本地存储

2FA Authenticator 不包含登录、账户注册、云同步、分析 SDK 或网络 API。账户信息和密钥只保存在当前 Mac 的应用本地数据目录中,应用不会把它们传到网络。

这也是一个需要明确说明的取舍:为了避免 macOS 钥匙串首次访问时的系统密码授权弹窗,当前版本采用本地文件保存方式,而不是钥匙串。它带来了更直接的首次使用体验,但不提供钥匙串级别的系统保护。

因此,建议用户:

  • 启用 macOS 登录密码与磁盘加密(FileVault)
  • 不在多人共用或不受信任的 Mac 上保存敏感账户
  • 为重要服务保留恢复码,并妥善保管
  • 在设备丢失或账户异常时及时更换 2FA 密钥

透明说明安全边界,比夸大“绝对安全”更重要。

如何安装

  1. 下载 Apple Silicon 版本的应用压缩包。
  2. 解压后,将 2FA Authenticator.app 拖进“应用程序”。
  3. 双击运行,添加 Base32 密钥或粘贴 otpauth:// 链接。
  4. 登录服务时,复制当前显示的验证码即可。

首次运行未经过 Apple Developer 公证的本地构建应用时,macOS 可能会显示来源提示。用户可在“系统设置 → 隐私与安全性”中确认打开。

后续计划

这个版本聚焦于最核心的验证码工作流。后续可以继续加入:

  • 从二维码导入 TOTP
  • 账户搜索、分组与排序
  • 加密备份与手动导出/导入
  • 可选的钥匙串安全存储模式
  • Intel Mac 通用包和正式 Developer ID 签名

结语

好的安全工具不该以复杂为代价。2FA Authenticator 的目标很朴素:让用户在需要验证码时,快速、离线、明确地拿到它。

如果你正在寻找一个专注于 macOS 本地使用体验的 TOTP 客户端,不妨试试这款轻量应用。


技术栈: Tauri 2 · Rust · React · Vite
平台: macOS 13+ · Apple Silicon
协议: RFC 6238 TOTP

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!