零云端、开源、为开发者而生:我从零做了一款浏览器密码管理器
零云端、开源、为开发者而生:我从零做了一款浏览器密码管理器

同一个后台系统,我有四套账号:dev、test、staging、prod。域名分别是 admin-dev.example.com、admin-test.example.com、admin.example.com……不对,其实很多团队的多环境是同一主域加子域,或者干脆是 192.168.1.10:8080 这种地址。
问题来了:Chrome 自带的密码管理器把这些环境的账号混在一起,每次填充都赌运气;Bitwarden 这类云端工具倒是能按 URL 精确匹配,但它只"填充"——填完之后,协议勾选框要自己点,登录按钮要自己点,两步验证码还要切手机去抄。
这些不大不小的摩擦,日复一日地发生在每个开发者、测试工程师的工作流里。这就是我做 Account Password Helper(账号密码管理助手) 的起点:一款零云端、开源、专为多环境登录场景设计的本地密码管理器。
目前它已上架 Chrome 应用商店,完全免费,代码以 GPL-3.0 协议开源。这篇文章讲讲它解决什么问题、怎么解决的,以及它刻意不做什么。
现有密码管理器的三个缺口
在动手之前,我把市面上的方案都试了一遍,发现三个共性缺口:
缺口一:多环境账号隔离。 密码管理器靠域名匹配决定"在这个页面给你看哪些账号"。大多数工具做的是模糊匹配——主域相同就算命中。对普通用户这是贴心,对开发者这是灾难:测试环境的账号被填进生产环境的登录框,轻则登录失败,重则误操作。我要的是精确匹配:只有 host 完全一致的条目才出现,localhost 这类本地开发域名则放行全部,方便联调。
缺口二:登录不是填充。 一次完整的登录动作 = 填用户名 + 填密码 + 勾选协议 + 点登录按钮,如果有两步验证还要再补一个验证码。现有工具只帮你完成前两步。Account Password Helper 的"一键登录"用一个快捷键 Ctrl+Shift+F(Mac 上是 Cmd+Shift+F)串起整条链:自动填充、自动勾选协议复选框、自动点击登录;如果是 GitHub 那种"先输密码、下一步输验证码"的两步登录,页面会出现一个 TOTP 活码胶囊,下一步直接把当前验证码填进去。整个过程不用碰鼠标,也不用切手机。
缺口三:隐私与信任。 云端密码管理器再优秀,你也要把全部凭证托付给一家公司的服务器和它的商业承诺。对一部分用户(包括我自己),"数据物理上不离开浏览器"不是加分项,而是前提条件。
核心功能走读
围绕这三个缺口,产品的功能版图长这样:
一键登录与四种填充策略
填充这件事看似简单,实际上现代前端框架给自动填充挖了不少坑:React 受控组件会忽略直接改 value 的赋值、各种自定义输入组件不响应标准事件。插件的填充器按顺序尝试三档降级——原生 setter 触发 input 事件、execCommand、模拟键盘事件——逐级回退,兼容主流框架。
填充入口有四层:内联填充(默认,输入框获焦后出现钥匙图标,点一下弹出账号下拉)、侧边栏填充、输入框右键菜单填充(右键即可填充用户名 / 密码 / 两步验证码,或在注册时直接生成并填充一个强密码——后者不要求先解锁会话)、快捷键一键登录。会话锁定时不弹系统通知了事,而是就地展开一个带「解锁后填充」引导的锁定卡片;真填不成,页面内提示条 + 桌面通知 + 工具栏角标三层反馈依次兜底,不会静默失败。
多环境隔离的域名匹配
匹配规则刻意做得"不智能":规范化后的 hostname 全等才命中。内部维护了一份 24 个以上的两段式 ccTLD 列表(com.cn、co.uk 这类),避免把 example.com.cn 错误截断成 com.cn。这套规则同时约束侧边栏列表、内联下拉和自动保存捕获,保证任何一个入口都不会把 prod 账号递到 test 页面上。
内置 TOTP,不是玩具
TOTP(RFC 6238)验证码在本地生成,列表里是实时活码加倒计时。添加密钥支持两种姿势:扫描网页上的二维码(内置 jsQR 解码,不发任何外部请求),或者上传图片。配合前面说的"两步登录接力",手机验证器在这个工作流里可以退休了。
离线安全体检
一键给所有密码做体检,产出 0–100 综合评分,五个维度:弱密码(内置弱密码字典 + Top 1000 常见密码库)、重复复用、疑似泄露、已过期、未开启两步验证。全部在本地计算,不联网查询——这是"体检工具本身不能成为数据出口"的底线。
迁移与备份
导入端自动识别 Chrome、LastPass、Bitwarden、1Password 的导出格式,CSV/JSON/Excel 都支持,中英文列名自动映射,30 秒搬家。备份端有三重:加密备份文件(.aph,AES-256-GCM 整库加密,导入时可解密预览)、邮箱备份、定时备份提醒。删除有 30 天回收站兜底,改错密码可以从每条 1–10 份的密码历史快照里恢复。
体验层
6 套色彩主题、中英文双语界面即时切换(扩展页和注入页面的 UI 同步生效)、网站图标直接读 Chrome 本地图标缓存(零外部请求)、密码生成器双模式(随机字符 + EFF Diceware 2048 词库助记词组)。
还有一层不太起眼的日常细节:侧边栏顶栏的「+」可以就地快速添加本站账号(网址自动预填当前域名);搜索框右侧一个图标在「本站 / 全站」之间切换,全站模式下外站账号一键在新标签页打开,而不会被递到当前页去填充;密码列表每行的「查看详情」用只读抽屉展示完整备注与密码修改历史,不必为了看一眼而进入编辑态;主密码输入框实时检测大写锁定,大小写误输不再被当成「密码错误」;自动保存弹窗则会在密码强度偏弱或被多个账号复用时给出内联提示——只提醒,不拦你保存。
安全模型:敢开源,才敢谈信任
密码管理器的信任不能靠口号,只能靠可验证的设计。Account Password Helper 的安全模型有几条硬边界:
- 零网络。 产品没有任何后端,所有网络权限都未申请。数据唯一的流向是:你的浏览器本地存储。
- 字段级加密。 条目的用户名、密码、URL、备注、TOTP 密钥全部单独加密,存储层看到的全是密文。
- 标准算法,不发明轮子。 PBKDF2-SHA256(600,000 次迭代)派生密钥,AES-256-GCM 认证加密,全部走浏览器原生 Web Crypto API。下一篇技术文章会展开讲实现细节。
- 会话有生命周期。 默认 24 小时有效期,支持闲置自动锁定(跟随系统锁屏)、浏览器重启锁定、手动一键锁定。锁定时内存中的密钥句柄立即清除。
- 代码全开源(GPL-3.0)。 加密那几行代码、权限声明、每一处网络调用(没有),都可以自己读。632 项自动化测试在 CI 上持续运行。
同时也要把话说在前面:这款工具的定位是开发、测试与日常登录场景,不建议在任何浏览器扩展里存放银行、支付类高敏感凭证;主密码遗忘无法找回,请善用加密备份。诚实的边界声明,是安全产品该有的样子。
写给谁

- 开发者:多环境账号隔离 + 一键登录,每天少点几十次鼠标;
- 测试工程师:快速切换测试账号,跨环境效率翻倍;
- 隐私敏感用户:零云端、零注册、零订阅,数据不出浏览器;
- 普通用户:告别记密码,TOTP 和密码放在一起,强密码一键生成。
最后
这个项目从 2026 年 5 月的 1.0 走到现在的 3.7,每个版本都是从真实使用中长出来的。它不打算成为"又一个 Bitwarden",而是把"开发者多环境登录"这一个场景做到极致顺手,同时把隐私底线焊死在架构里。
如果你也受够了混在一起的测试账号和切来切去的手机验证码,欢迎试试:
- Chrome 应用商店一键安装(自动更新)
- GitHub 仓库(源码 / Releases 下载 / Issue 反馈),顺手点个 Star 是对开源最大的支持
- 在线演示与双语 FAQ
下一篇,我们聊聊让侧边栏在 1 秒内打开的完整工程实现——那是 Manifest V3 时代每个扩展开发者都会踩的坑。