【JS 第三方库】otplib

2024-02-20 00:00:00

目录:

otplib 模块介绍

otplib 是一个用于生成和验证一次性密码(OTP)的 JavaScript 库,支持 HMAC-based One-Time Password (HOTP) 和 Time-based One-Time Password (TOTP),并且兼容 Google Authenticator。它适用于 Node.js 和浏览器环境,是增强应用安全性、实现双因素认证(2FA)的常用工具。

otplib 实现了两种主要的 OTP 标准:

  • TOTP (Time-based OTP):基于时间生成动态密码,通常每30秒更新一次,是 Google Authenticator 等应用使用的标准。
  • HOTP (HMAC-based OTP):基于事件计数器生成动态密码。

其核心原理是客户端(如身份验证器App)与服务端共享一个种子密钥(Secret),双方使用相同的算法(如 HMAC-SHA1)和参数(时间或计数器)独立计算,生成相同的动态密码进行验证。整个过程无需联网调用第三方接口。

安装依赖:

$ npm install otplib --save 

TOTP 示例

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

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: