📌  相关文章
📜  在 js 中提取过期 jwt 令牌的有效负载 - Javascript (1)

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

在 JavaScript 中提取过期 JWT 令牌的有效负载

JWT 是一种广泛使用的令牌格式,用于在网络应用程序之间传递身份验证和授权信息。JWT 令牌包含一个有效载荷,该有效载荷包含有关用户的信息,例如姓名、电子邮件、角色等。然而,如果 JWT 令牌过期,有效载荷将不再可用。在这种情况下,我们需要提取已过期的令牌的有效负载以查看用户信息。在本文中,我将介绍如何从已过期的 JWT 令牌中提取有效载荷。

JWT 令牌基础

在了解如何提取有效载荷之前,请先了解 JWT 令牌的结构。JWT 令牌由三个部分组成,它们由点分隔符分隔:

  • Header(头部):包含令牌的元数据和算法类型。
  • Payload(有效负载):包含有关用户的信息。
  • Signature(签名):由头部和有效载荷组成的哈希值。

JWT 令牌结构示例如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

在本例中,令牌的头部是 Base64 编码的字符串,它指出了签名算法类型和令牌类型。有效负载也是 Base64 编码的字符串,包含有关用户的信息,例如用户 ID 和角色。签名是对头部和有效负载的哈希值,用于保护令牌的完整性。通过验证签名,可以确保令牌没有被篡改。

提取过期 JWT 令牌的有效载荷

下面是一个步骤,您可以在 JavaScript 中使用来提取过期的 JWT 令牌的有效负载。

步骤 1:将令牌分解为其组成部分

在 JavaScript 中,我们可以使用 split() 函数将令牌分解为其组成部分。我们将使用点分隔符将令牌分解为三个部分:

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
const [header, payload, signature] = token.split(".");

此代码为我们提供了一个头部、有效负载和签名变量,包含 JWT 令牌中的相应部分。

步骤 2:将有效负载解码为 JSON 对象

由于有效负载是 Base64 编码的字符串,我们需要将其解码为 JSON 对象。我们将使用 atob() 函数解码:

const decodedPayload = JSON.parse(atob(payload));
步骤 3:提取到期时间

JWT 令牌有一个特殊的属性 exp,用于记录有效载荷的到期时间。我们需要从解码后的有效负载对象中提取该属性,以便知道令牌何时到期。

const expiresAt = decodedPayload.exp;
步骤 4:检查到期时间

最后,我们检查过期时间是否已经过期,判断是否提取过期JWT 令牌的有效载荷。我们将使用 Date.now() 函数获取当前时间戳,并将其与到期时间进行比较。

if (Date.now() / 1000 >= expiresAt) {
  // Token is expired, extract payload
  const expiredPayload = decodedPayload;
  // ...
}

如果Date.now() / 1000 >= expiresAt,则收到的令牌已经过期,我们可以提取有效负载。

这就是从过期 JWT 令牌中提取有效负载的方法,只需要分解令牌,解码有效负载,提取到期时间并检查有效性。为了避免忘记在应用程序中检查过期时间,建议使用现成的 JWT 库,例如 jsonwebtoken,它可以HMAC签名和验证JWT令牌,还支持自动验证令牌,以便提取有效载荷信息。