📌  相关文章
📜  将过期时间添加到 jwt 扩展令牌 - Javascript (1)

📅  最后修改于: 2023-12-03 15:09:39.402000             🧑  作者: Mango

将过期时间添加到 JWT 扩展令牌 - JavaScript

JSON Web Token (JWT) 是一个用于安全地传输信息的标准。它由三部分组成:头部,载荷和签名。JWT 被广泛用于身份验证和授权,并且经常与 Node.js 或其他后端技术一起使用。由于 JWT 是无状态的,我们需要确保每个 JWT 令牌在安全的时间范围内。

在 JavaScript 中,我们可以通过向 JWT 扩展令牌的载荷添加 exp 字段来设置过期时间。这个字段需要一个 Unix 时间戳,即自 1970 年 1 月 1 日以来的秒数。当 JWT 令牌过期时,它将不再受信任,并且必须重新授权。

以下是如何将过期时间添加到 JWT 扩展令牌的 JavaScript 代码片段:

const jwt = require('jsonwebtoken');

// 设置 JWT 过期时间为 1 小时
const expiresIn = '1h';

// 你的私钥,仅用于开发目的。在生产环境中,请不要将私钥存储在代码库中。
const privateKey = 'your_private_key';

// 负载数据
const payload = {
  user_id: 123,
  username: 'johndoe'
};

// 签名 JWT 令牌并添加过期时间
const token = jwt.sign(
  { exp: Math.floor(Date.now() / 1000) + expiresIn, ...payload },
  privateKey
);

在上面的示例中,我们使用了 Node.js 的 jsonwebtoken 库来处理 JWT。在 jwt.sign() 函数中,我们将 exp 字段添加到负载数据中,并使用 Math.floor(Date.now() / 1000) 生成当前时间的 Unix 时间戳。我们还将过期时间设置为 expiresIn 变量的值(在本例中为 1 小时)。最后,我们使用私钥来对 JWT 进行签名。

请注意,我们固定了负载数据中的 user_idusername 字段。在实际应用中,您可能需要使用不同的负载数据,并将其用作身份验证或授权所需的数据。

如果您想验证 JWT 令牌是否仍然有效,请检查 exp 字段是否大于当前时间的 Unix 时间戳,如下所示:

const decodedToken = jwt.decode(token, { complete: true });
const now = Date.now() / 1000;

if (decodedToken.exp < now) {
  // JWT 过期了
} else {
  // JWT 仍然有效
}

在上述代码中,我们使用 jwt.decode() 函数来解码 JWT,并使用 Date.now() / 1000 生成当前时间的 Unix 时间戳。然后我们与 exp 字段进行比较,并确定 JWT 是否已经过期。

总之,将过期时间添加到 JWT 扩展令牌的过程非常简单。只需将 exp 字段添加到负载数据中,并确保使用正确的 Unix 时间戳即可。在实际应用中,您应该为 JWT 设定合适的过期时间,以确保安全性和可用性。