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