简介
speakeasy 是一个流行的 JavaScript 库,用于生成和验证 TOTP 和 HOTP 一次性密码。TOTP(基于时间的一次性密码)和 HOTP(基于计数器的一次性密码)都是用于两步验证的常用方法。speakeasy 的完整文档可在 GitHub 页面 找到。
安装和设置
安装 speakeasy,只需要在项目文件夹下运行以下命令即可:
npm install speakeasy
然后可以在代码中使用 require
方法导入:
const speakeasy = require('speakeasy');
生成秘钥
使用 speakeasy 创建秘钥非常容易,只需要使用下面的代码:
const secret = speakeasy.generateSecret({ length: 20 }); console.log(secret);
该代码将打印一个随机生成的秘钥对象,其中包括以下属性:
- base32: 包含一个 Base32 编码的密钥字符串,可用于显示给用户或发送给其他服务。无论如何,请确保不将此值存储在非安全环境中。
- hex: 包含一个十六进制编码的密钥字符串,可以用于某些应用程序和测试。
- ascii: 包含一个 ASCII 编码的密钥字符串,可用于以文本格式呈现之类的内容。
你还可以向 generateSecret
函数传递其他选项,例如 name
属性。这个属性的值可以存储用户、设备或客户端应用程序的名称。该名称将随机生成的密钥结合在一起,以创建唯一的密钥。
生成 TOTP 密码
一旦你有一个密钥,你可以使用 totp
函数生成 TOTP 密码。仅需以下代码即可:
const token = speakeasy.totp({ secret: 'JBSWY3DPEHPK3PXP', encoding: 'base32' }); console.log(token);
该代码将生成一个允许 30 秒的 TOTP 令牌。在处理具有同步时钟的设备时,可以使用此技术。
如果对于绝对安全性有需求,则可以创建限制一次性密码大于 30 秒的策略。
生成 HOTP 密码
hotp
函数与 totp
函数非常相似,只是hotp
生成的是一个基于计数器的一次性密码而不是一个基于时间的。这使得 hotp
函数非常适合需要与另一个应用程序同步的身份验证场景。
const hotp = speakeasy.hotp({ secret: 'JBSWY3DPEHPK3PXP', counter: 0 }); console.log(hotp);
如上所示,使用 hotp
函数时,你需要提供密钥和计数器的值。
实现两步验证
有时,你需要将两个验证因素组合在一起,以提高安全性。有两种方法可以实现这种技术。
TOTP 和 PIN 码
这种技术使用 TOTP 和用户提供的 PIN 码来完成二次认证。
首先,用户会收到一个生成的 TOTP 令牌。然后,用户将在应用程序中输入另一个静态 PIN 码。该应用程序将汇总两个值并验证其是否匹配。
-- -------------------- ---- ------- ----- ------ - ------------------- ----- ---- - --------- ----- -------- - ----------------------- ------- ------- --------- --------- ------ ----- ------- - --- ---------------- ---- ------- -- ---------- - ------- - -------------
使用如上所示的 verify
函数,可以检查传入的 PIN 码是否有效。该函数取决于输入密码和现有密码之间的区别,并给出相应的值。
HOTP 和 PIN 码
你还可以使用HOTP事务方法,该方法生成的一次性密码将与用户输入的静态 PIN 码结合使用。
-- -------------------- ---- ------- ----- ------ - ------------------- ----- --------- - --------- ----- -------- - ----------------------- ------- ------- --------- --------- ------ ---------- -------- - --- ---------------- ----- ------------ -- ---------- - ------- - -------------
使用如上所示的 verify
函数,可以检查传入的 PIN 码是否有效。
结论
以上就是有关 npm 包 speakeasy 的简单介绍以及使用教程。speakeasy 是非常方便且广泛应用于两步验证的库。在实际使用中,将 speakeasy 与其他 Node.js 模块一起使用将非常容易。通过 speakeasy,您可以创建安全应用程序,并为您的用户提供更加安全的身份验证体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedaeb5b5cbfe1ea0610eb6