欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 使用Node.js轻松集成两步验证(2FA)功能

使用Node.js轻松集成两步验证(2FA)功能

2025/4/22 4:39:30 来源:https://blog.csdn.net/qq_30110433/article/details/147319963  浏览:    关键词:使用Node.js轻松集成两步验证(2FA)功能

2FA(双因素认证,Two-Factor Authentication) 是一种提升账户安全性的验证机制,要求用户在登录时提供两种不同类型的身份验证信息。常见的组合是“密码(你知道的东西)” + “动态验证码(你拥有的东西,如手机生成的临时代码)”。即使密码泄露,攻击者也无法仅凭单一因素入侵账户,从而大幅降低安全风险。2FA广泛应用于银行、社交平台和企业系统,是当前网络安全防护的黄金标准之一。

前几天后端老大哥再让我开发登陆时候提到了2FA验证,于是我就去了解了一下,发现这个确实挺好用的。想着就记录下来!

首先咱们需要使用了两个库 speakeasy 和 QRCode 一个是用于用于生成和验证 TOTP(基于时间的一次性密码)和 HOTP(基于计数的一次性密码)一个用户生成二维码。

TOTP是一种算法,他不需要网络支持,他根据密钥和当前的时间生成验证码(之前一直不懂app的验证码和后端怎么同步code)

实现2FA验证很简单,就是生成密钥-把密钥给用户,同时把生成的二维码也给用户-用户绑定,其实就这样,不过绑定后可以让用户输入一次code后端去处理(比如把是否绑定字段更改一下值)

生成2FA,首先创建 secret 变量用于保存这个库生成的,他返回的数据是一个对象里面有好几个参数。其中有一个base32是咱们要保存在用户的信息里面的,这个相当于是一个密钥。

  const secret = speakeasy.generateSecret({name: xxxxxxx,length: 20})

现在要生成二维码,注意toDataURL中传的第一个参数secret.otpauth_url就是上面生成的,这时候前端显示这个二维码,用户使用手机扫码就行了,这里要使用Authenticator 软件扫码,推荐谷歌的或者微软的,其他类似也可以不过有的收费(收费的就是垃圾!!!)

    QRCode.toDataURL(secret.otpauth_url, function (err, imageUrl) {if (err) {//二维码生成失败} else {//二维码获取成功}})

生成说完了,来说说验证。

其中userSecret就是上面咱们保存在用户信息中的base32(用户在获取用户信息时候,接口返回应该把保存这个数据的字段过滤,这个是密钥,属于敏感数据)然后就是code,这个就是用户输入的在app看到的验证码。

window:1 这个是容忍时间窗口,允许 30 秒时间误差,然后就是判断 isVerified 执行验证成功或者失败的代码。

        // 验证用户输入的动态验证码const isVerified = speakeasy.totp.verify({secret: userSecret,encoding: 'base32',token: code,window: 1})

其实这个这个就是生成验证,但是前端怎么实现,验证,绑定,取消绑定,绑定之后要不要输入一次密码,都可以去根据这个实现了。

这次就不放出完整代码,因为是编辑写的是接口,有很多没有的东西修改起来比较麻烦也不可以开箱即用~

这个是我的博客,欢迎大家多多交流:小贺博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词