如何使用JWT实现无过期认证系统

问题描述 投票:0回答:1

我想知道如何实现基于 JWT 的身份验证系统,其中没有明确的到期日期

  • 强制“过期”如何处理?
  • 没有状态/会话管理是否可以?
  • 这是否正确?
node.js typescript authentication security jwt
1个回答
0
投票

如果你想使用JWT来实现,你可以不设置任何值的过期时间,就像下面的代码:

const jwt = require("jsonwebtoken");
require("dotenv").config();

const secret = process.env.SECRET;
const token = jwt.sign({ user_id: 1234 }, secret);
console.log("The JWT that will never expire:", token);

但是,如果您想在不使用 jsonwebtoken 模块(通过使用自定义实现)的情况下执行此操作,您可以使用 crypto 模块创建自己的令牌库,就像以下代码一样:

const crypto = require("crypto");
require("dotenv").config();

const secret = process.env.SECRET;

const generateTokenWithoutExpiration = (userId) => {
   const signature = crypto.createHmac("sha256", secret).update(userId.toString()).digest("hex");
   const token = `${userId.toString()}.${signature}`
   return token;
});

const verifyToken = (userId, token) => {
   const [ stringValueOfUserId, signature ] = token.split(".");
   const expectedToken = crypto.createHmac("sha256", secret).update(parseInt(stringValueOfUserId).digest("hex");
   return expectedToken === token;
};

module.exports = {
   generateTokenWithoutExpirationTime,
   verifyToken
};
© www.soinside.com 2019 - 2024. All rights reserved.