如何验证nodejs中的jwt令牌/永不过期?

Posted

技术标签:

【中文标题】如何验证nodejs中的jwt令牌/永不过期?【英文标题】:how to verify jwt token in nodejs / never expire? 【发布时间】:2020-01-15 21:52:31 【问题描述】:

我在节点 js 中实现了 JWT 令牌。我能够生成 jwt 令牌。现在我想检查它什么时候会 过期或无效 。 我检查了它在120ms 之后说的文档,它将过期。但我的令牌没有过期。它总是解码令牌,为什么?

我像这样生成令牌 '

app.get("/saveData", async (req, res) => 
  try 
    const token = await userService.create(
      userId: "abcp",
      password: "hello",
      appsAccess: ["yes", "test"]
    );

    res.send(token);
   catch (error) 
    console.log(error);
  
);

并像这样验证令牌

app.get("/verify-token", async (req, res) => 
  let tokenStatus = await userService.verifyAccessToken(
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6ImFiY3AiLCJhcHBzQWNjZXNzIjpbInllcyIsInRlc3QiXSwiX2lkIjoiNWQ3Yzk4MTYzZmQ1NGIwOGUwMjYzNjg0IiwiX192IjowfSwiaWF0IjoxNTY4NDQ2NDg2LCJpc3MiOiJqamoiLCJzdWIiOiJhYmNwIn0.1fqzYJ1p9jSIiNjbA7MwEsU4EsMmmpxF34TU1ZjonSA"
  );
  res.send(tokenStatus);
);

这是我的代码

https://codesandbox.io/s/lively-tree-hd0fo

verifyAccessToken(token) 
    return jwt.verify(token, "jhjhhj");
  

如果我生成令牌,它将在10min30min..etc 之后过期

【问题讨论】:

这里有一个代码框codesandbox.io/s/jsonwebtoken-test-vfe8q,你可以把它拆开,通读一遍你就明白了。 【参考方案1】:

您可以使用expiresIn 选项来执行此操作。基于您的代码的示例:

const token = jwt.sign(payload, "jhjhhj", 
  algorithm: "HS256",
  issuer: "jjj",
  subject: `$user.userId`,
  expiresIn: "10m"
);

【讨论】:

但它总是会返回一个令牌......!我为1min添加了这个@

以上是关于如何验证nodejs中的jwt令牌/永不过期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 jwt-simple 中的令牌过期?

实现永不过期的 OAuth 刷新令牌

其中 jsonwebtoken 存储在服务器 nodejs 中。用户注销后如何使 JWT 过期

如何在 django rest 框架中验证 jwt 身份验证中的令牌

当用户在nodeJS / Express和Angular中空闲一段时间(基于令牌的授权)时,我如何使我的JWT令牌过期

如何使用后端的 JWT 实用程序从前端验证 JWT? (反应+ Springboot)