【问题标题】:how to refresh token when expired in jwt如何在jwt中过期时刷新令牌
【发布时间】:2019-02-11 18:31:38
【问题描述】:

我正在我的项目中实现 JWT。我实现了 jwt 并给了它 1 分钟的过期时间。从 api 端生成的 jwt 是在登录期间,令牌和过期详细信息在结果中发送并存储在本地存储中。如何从 API 端刷新过期令牌并将其再次发送回客户端,以便可以将其存储在本地存储中并使用拦截器为每次调用发送?

这就是我创建 jwt 并给出过期时间的方式

// let us suppose this is my input
tokenObject = { User: { username: name, pwd: pwd } };
//creating a jwt here
jwt.sign({ tokenObject }, "secretkey", { expiresIn: "60s" }, (err, token) => {
  res.json({
    token
  });
});

在此之后,我将验证结果中的令牌并将结果发送给客户端。 一分钟后如何重新生成令牌? 请帮助并让我知道方法并告诉我我是否做错了什么。谢谢!!

【问题讨论】:

  • 我不会接受过期的令牌来提神。
  • 实现这个的正确方法是什么?
  • 过期令牌是每个定义的无效令牌。您可以使用刷新令牌,这是一种长期存在的令牌,允许您刷新访问令牌或接受未过期的访问令牌进行刷新。

标签: angularjs node.js jwt


【解决方案1】:

您可以创建一个接受 JWT 令牌的 API,对其进行验证,然后为同一用户颁发一个新令牌。

看看jsonwebtokenverify方法。 在验证令牌时,您也可以使用ignoreExpiration: true 选项来验证过期的令牌。然后使用sign 方法生成新的。
因此,在从前端发出请求时,如果您收到令牌过期错误,那么您使用该 API 发出一个新令牌并保存该令牌。

话虽如此,我建议您查看有关从docs 刷新JWT 令牌的说明:

首先,如果自动刷新 JWT,我们建议仔细考虑 不会在您的系统中引入任何漏洞。

但是,我们不喜欢将它作为库的一部分包含在内, 你可以看看这个例子来展示这是怎么回事 完成。除了那个例子之外,还有一个问题和一个拉动 请求获得有关此主题的更多知识。

这是包含代码的要点的link

【讨论】:

    【解决方案2】:

    您需要添加一个函数或中间件来检查 JWT 是否有效。可以使用JWT库的verify方法:

    jwt.verify(token, 'secretKey', function (err, decoded) {
      if (err) {
        if (err.name === 'TokenExpiredError') {
           //create a new token and send the same way you created initially
        }
      }
    });
    

    【讨论】:

    • @AnkushRanapure 在过期后生成新令牌始终是一个好习惯。
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2018-08-05
    • 2016-10-10
    相关资源
    最近更新 更多