我在我的节点应用程序中生成一个简单的令牌,使用notp
:
var notp = require('notp')
notp.totp.gen("ciao", {}) // => 345678
我想构建一个类似于 Google Authenticator 提供的可视化,并且我需要知道生成的 otp 将过期的秒数(或日期时间)。
我该怎么做?
我在我的节点应用程序中生成一个简单的令牌,使用notp
:
var notp = require('notp')
notp.totp.gen("ciao", {}) // => 345678
我想构建一个类似于 Google Authenticator 提供的可视化,并且我需要知道生成的 otp 将过期的秒数(或日期时间)。
我该怎么做?
我找到了怎么做,其实很简单,你只需要知道算法使用的开始时间。
事实证明,Google Authenticator 使用 Unix Epoch,所以在我的例子中,显示我可以做的计时器:
setInterval(() => (console.log(30 - Math.round(new Date() / 1000) % 30)), 1000)
这应该很简单,
Google Authenticator 应用程序和服务器上的代码将从每分钟开始每 30 秒刷新一次新代码。
因此,只要您的服务器和应用程序同步,这 30 秒的间隔将始终与它们始终从一分钟开始和 1 分 30 秒开始。
另一个需要考虑的因素是,服务器端的 Google Authenticator 可以设置为允许代码仅在 30 秒或 4 分钟内有效。因此,您需要检查您的服务器是否设置为 30 秒或 4 分钟,然后进行相应的编码。
设置时的示例:
默认情况下,令牌的有效期为 30 秒,为了补偿客户端和服务器之间可能存在的时间偏差,我们允许在当前时间之前和之后使用额外的令牌。如果您遇到时间同步不佳的问题,您可以将窗口从其默认大小 1:30 分钟增加到大约 4 分钟。你想这样做吗(是/否)