什么是 TOTP?
TOTP(Time-based One-time Password,基于时间的一次性密码)是一种常用于二次验证的算法。它将当前的时间和一个密钥一起计算出一个密码,只有在特定的时间段内才能被解密。这种算法使用了已知的时间和共享的密钥来生成一次性密码,使得用户可以只有在身份验证成功之后才可以访问到受限资源。
@nest-public/totp 简介
@nest-public/totp 是一个用 TypeScript 编写的 TOTP 库。它提供了一个简单易用的 API,可以方便地生成和验证 TOTP 密码。
安装
你可以使用 npm 安装 @nest-public/totp:
npm install @nest-public/totp
使用
生成 TOTP 密码
import { TOTP } from '@nest-public/totp'; // 使用默认参数生成 TOTP 密码 const totp = new TOTP(); const code = totp.generate('my-secret-key'); console.log(code);
上面的代码将打印出一个六位数字的 TOTP 密码,例如 123456
。
默认情况下,@nest-public/totp 使用 SHA1 散列算法和 30 秒时间步长,可以通过构造函数参数进行配置:
import { TOTP, HashAlgorithm } from '@nest-public/totp'; // 使用 SHA256 散列算法和 60 秒时间步长生成 TOTP 密码 const totp = new TOTP('sha256', 60); const code = totp.generate('my-secret-key'); console.log(code);
验证 TOTP 密码
import { TOTP } from '@nest-public/totp'; // 验证 TOTP 密码 const totp = new TOTP(); const isValid = totp.verify('123456', 'my-secret-key'); console.log(isValid);
上面的代码将打印出一个布尔值,表示 TOTP 密码是否有效。
@nest-public/totp 还提供了两个可选参数用于定制验证行为:
window
: 时间步窗口大小,以允许时间上的不准确度。默认为 1。digits
: 期望的 TOTP 密码位数。默认为 6。
import { TOTP } from '@nest-public/totp'; // 验证 TOTP 密码,允许 2 个步之内的时间偏差,期望 TOTP 密码为 8 位 const totp = new TOTP(); const isValid = totp.verify('12345678', 'my-secret-key', 2, 8); console.log(isValid);
结语
@nest-public/totp 是一个简单易用的 TOTP 库,如果你需要在 Node.js 中生成和验证 TOTP 密码,它是一个不错的选择。希望本文对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/95528