给应用加上双因素认证(2FA),听起来像是一个需要花整个周末去读RFC文档的苦差事。正因如此,大多数个人项目从未实现这一功能。开发者amansoomro062发布了一款名为2fa-kit的开源工具,将这一过程压缩为两步。

第一步:注册

打开网易新闻 查看精彩图片

生成一个密钥,以二维码形式展示给用户,并加密存储。整个过程只需几行代码:调用createVault创建加密存储实例,用generateSecret生成密钥,再通过buildUri构建标准的otpauth URI——这个URI可以直接渲染成二维码,也可以展示密钥文本供用户手动输入。最后,用vault.encrypt对密钥进行加密,将加密结果和盐值一并保存到用户记录中。

第二步:登录时验证

用户提交验证码后,先用vault.decrypt解密之前存储的密钥,再调用verifyTotpWithDelta校验用户输入的验证码是否有效。工具还会返回当前时间步长(step),开发者可以借此实现防重放攻击——记录上一次成功登录的时间步长,拒绝任何小于或等于该值的验证码。

这就是完整的接入流程。该工具兼容Google Authenticator、Authy、1Password以及任何支持TOTP(基于时间的一次性密码)协议的应用。

容易出错的地方,工具已替你处理

手写TOTP验证逻辑时,有几个细节容易被忽视:时间窗口偏移、密钥加密存储、重放攻击防护。2fa-kit将这些常见坑点内置处理,开发者无需自己研究RFC 6238规范。

该库零依赖,支持Node 20+、Bun、Deno以及浏览器环境。源码和文档托管在GitHub上(github.com/amansoomro062/2fa-kit)。

对于正在犹豫是否给自己的项目加上2FA的开发者来说,这个工具降低了接入门槛。作者在发布说明中问道:“是什么阻止了你在自己的项目中添加2FA?”——现在,这个理由可能不再成立了。