【问题标题】:Speakeasy express js:onetime password generation is not expiredSpeakeasy express js:一次性密码生成未过期
【发布时间】:2017-04-19 06:22:12
【问题描述】:

这是我的一次性OTP(一分钟后过期)的实现,带有speakeasy包

 var secret = speakeasy.generateSecret({length: 20}).base32;
        var token = speakeasy.totp({
            secret: secret,
            encoding: 'base32',
            time:60
        });
  console.log('OTP',token);

验证令牌

var verified = speakeasy.totp.verify({
            secret: req.params.secret,
            encoding: 'base32',
            token: req.params.token,
            time:60
        });

但 OTP 永远不会过期它console.log(verified) 总是在过期时间后返回 true

【问题讨论】:

    标签: javascript node.js express one-time-password


    【解决方案1】:

    在您的令牌定义中:

    var token = speakeasy.totp({
                secret: secret,
                encoding: 'base32',
                time:60
            });
    

    time 选项更改为step 选项并重试:

    var token = speakeasy.totp({
                secret: secret,
                encoding: 'base32',
                step:300  //time in seconds
            });
    

    您可以使用两个选项:timestep?

    请检查这两个选项并决定哪一个适合您的情况。如果time 是适合您的选项,那么您必须以秒为单位指定纪元时间。 60 在这里似乎不是一个正确的值。 time 的有效值可以是 1495176700

    给出您希望令牌过期的 epoch 时间,然后重试。希望它能适应这些变化。

    【讨论】:

    • 根据文档,时间是从他们的文档var token = speakeasy.totp({ secret: secret.base32, encoding: 'base32', time: 1453667708 // specified in seconds });中指定的秒数
    • 我没有理解“60 在这里似乎不是一个正确的值。时间的有效值可能是 1495176700”的含义
    • 还有哪里可以添加epcoh时间??
    • 我想在一段时间后使令牌过期,这就是为什么我选择基于时间的计数器
    • 请检查我提到的timestep 的超链接。然后你就会明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多