爱意满满的作品展示区。
vfasky

做了一个原生的 macOS Vaultwarden 客户端:基于 MyGo ,主窗口零 WebView,支持 Touch ID 与系统级 AutoFill

  •  
  •   vfasky ·
    vfasky · 10 mins ago · 26 views

    自建 Vaultwarden 好几年了。官方的 macOS 桌面端基于 Electron,日常开着内存占几百兆,偶尔唤醒也有点迟钝;更关键的是 Safari 里的自动填充只能靠扩展,体验和系统原生有明显差距。

    一直想找个轻快、原生的 Mac 客户端,后来索性自己动手写了一个,最近在主力机上用得很顺手,今天开源出来分享给自建密码库的朋友。

    项目名叫 MyGo Vaultwarden。

    关于底层:为什么用 MyGo?

    这个项目是用 egoist 开源的 MyGo (github.com/egoist/mygo) 框架构建的。

    很多朋友写桌面端习惯用 Wails 或 Electron,本质上还是把前端网页打包进去。而 MyGo 走的是另一条路线:

    • 后端是纯 Go:处理 Vaultwarden 复杂的网络请求、AES-GCM/Argon2 加解密、数据同步以及快照管理,性能和类型安全都让人放心。
    • UI 是纯原生 Native UI:直接绑定 macOS 的 Swift / AppKit,主窗口里没有任何 WebView、HTML 或 JavaScript。
    • 极致轻量:没有内嵌浏览器的开销,内存占用极小,原汁原味地遵循 macOS 的窗口、原生控件、菜单、快捷键和动画规范。

    这也是我在实际写这个项目时觉得最爽的地方:既有 Go 写复杂业务的稳健,又能获得真正的 macOS 原生桌面质感。

    核心功能与体验

    1. 系统级自动填充:接入了 macOS 系统的「自动填充与密码(Credential Provider)」。在 Safari 或其它应用中无需常驻扩展,点选凭据并通过 Touch ID 认证即可填充。带有 TOTP 的条目,填充后还会自动把两步验证码复制到剪贴板。
    2. 完整的个人密码库:支持登录、支付卡、身份、安全笔记、SSH 密钥等 8 种类型;支持收藏、文件夹、归档、回收站与批量管理;⌘F 即时毫秒级搜索并展示网站图标。
    3. 日常开箱即用:直连自建 Vaultwarden 服务器,支持两步验证(MFA / 恢复码)、Bitwarden 兼容的 JSON 导入导出、Send 以及设备登录审批,并带应用内更新。

    安全性设计

    做了哪些具体防护:

    • 双沙盒隔离:主应用与 AutoFill 扩展均开启 macOS App Sandbox。AutoFill 扩展在独立的沙盒进程中运行,只读取一份经过权限和策略过滤的 Login 最小投影(仅包含用户名、密码、URI 与 TOTP),不触碰完整的加密库。
    • 本地静态加密:完整密码库仅以受 Keychain 和主密码保护的 AES-GCM 本机快照形式落盘。
    • 主动防御:在向服务器发起任何网络请求前,本地会先检查并拒绝弱 KDF 参数(如低迭代的 PBKDF2);锁屏、睡眠或空闲 15 分钟后自动锁定。
    • 写入安全:网络异常导致的未知写入结果绝不会在后台静默重放,避免冲突覆盖。
    • 更新验签:自动更新包强制校验 Ed25519 签名与 SHA-256 摘要。

    目前的局限(先排雷)

    • 暂不支持组织管理:当前版本只聚焦于个人密码库。组织条目能正常同步和解密,但组织管理(成员、集合、权限分配等管理后台功能)已延期到后续版本。
    • 仅支持 macOS:没有跨平台计划。
    • 未做第三方安全审计:代码已开源,遵循 GPL-3.0 协议,我自己每天在作为主力使用;但对于极其重要的数据,建议试用前先通过官方端导出备份一次。

    项目地址与讨论

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2062 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:13 · PVG 00:13 · LAX 09:13 · JFK 12:13
    ♥ Do have faith in what you're doing.