目录:
otplib 是一个用于生成和验证一次性密码(OTP)的 JavaScript 库,支持 HMAC-based One-Time Password (HOTP) 和 Time-based One-Time Password (TOTP),并且兼容 Google Authenticator。它适用于 Node.js 和浏览器环境,是增强应用安全性、实现双因素认证(2FA)的常用工具。
otplib 实现了两种主要的 OTP 标准:
其核心原理是客户端(如身份验证器App)与服务端共享一个种子密钥(Secret),双方使用相同的算法(如 HMAC-SHA1)和参数(时间或计数器)独立计算,生成相同的动态密码进行验证。整个过程无需联网调用第三方接口。
安装依赖:
$ npm install otplib --save
import { OTP } from "otplib";
// 创建 OTP 实例,默认是 TOTP
const otp = new OTP();
// 生成密钥
const secret = otp.generateSecret()
console.log('secret', secret) // PTMF5BROYD6N3H7YGBFZUDLB5KA2XOSN
// 生成 TOTP token
const token = await otp.generate({ secret })
console.log('token', token) // 696431
// 验证 token
const result = await otp.verify({ secret, token })
console.log(result.valid) // true or false
otplib 生成的 secret 是 32 位长度的,但是市面上比如 GitHub 生成的 secret 只有 16 位长度,此时使用 otplib 根据 secret 生成 token 就会报错,可以使用另一个库 authenticator。
↶ 返回首页 ↶