4 分钟讲解 JWT(附图片)简介 JWT 结构 步骤 优点 缺点

2025-05-27

4 分钟讲解 JWT(附图片)

介绍

JWT 的结构

步骤

优势

缺点

介绍

JWT 身份验证和会话身份验证是验证 Web 应用用户身份的方法。
本文将详细介绍 JWT、其结构以及优缺点。JWT
代表JSON Web Token,它是一种常用的无状态用户身份验证标准,用于以 JSON 格式在客户端和服务器之间安全地传输信息。
默认情况下,JWT 是编码的,而不是加密的。
它使用只有服务器知道的密钥进行数字签名。JWT
也可以加密,但本文将重点介绍已签名的非加密令牌。

JWT 的结构

JSON Web Token 由三部分组成,三部分之间用句点分隔:
标头、有效负载和签名。
每部分均采用 Base64 编码。

JWT 编码结构

标题

标头由令牌类型(即 JWT)和使用的签名算法(例如 HMAC SHA256 或 RSA)组成。



{ 
  "typ": "JWT",    
  "alg": "HS256"
}


Enter fullscreen mode Exit fullscreen mode

有效载荷

有效负载由声明组成。
声明是关于用户的声明以及其他数据。
例如,我们有令牌的签发时间。
我们也有它的到期时间,因为令牌应该过期。



{
"iss": "example_issuer",
"sub": "user_id123",
"exp": 1644768000,
"iat": 1644744000
}


Enter fullscreen mode Exit fullscreen mode

签名

签名是 JWT 最重要的部分。
它由头部、有效载荷和密钥计算得出,并输入到签名算法中以供使用。



signature = HMAC-SHA256(base64urlEncode(header) + "." + base64urlEncode(payload), secret_salt )


Enter fullscreen mode Exit fullscreen mode

JWT 结构解码

步骤

典型的 JWT 授权流程涉及的步骤如下:

1- 身份验证:用户使用用户名和密码登录,或者使用例如 Google 或 Facebook 等平台。
服务器验证用户提供的凭证。

2- 令牌生成并将令牌发送到客户端:服务器将生成 JWT 并将其发送到客户端,客户端将其存储以供将来使用。

3-将令牌发送到服务器:当客户端想要访问服务器上受保护的资源时,它会在 HTTP 请求的授权标头中发送 JWT。



axios.get(URL, {
    headers: {
        'Authorization': 'Bearer ' + token,
    },
})


Enter fullscreen mode Exit fullscreen mode

4-验证令牌:服务器接收请求,并使用签名密钥检查 JWT 的签名,从而验证其有效性。
如果 JWT 有效,服务器将提取其中包含的信息,并根据这些信息确定用户有权执行的操作。

5- 授权请求:如果用户有权访问资源,服务器将返回请求的数据。如果用户未获得授权,服务器将返回错误消息。

JWT 流

优势

JWT 的优势

  • 轻的

  • 便携性:可以在多个平台、网络和移动设备上处理。

  • JSON 解析器在大多数编程语言中很常见。

  • 由于密钥存储在服务器端,因此可以防止篡改。

  • 由于 JWT 令牌的无状态特性,服务器不需要存储任何会话信息。

缺点

缺点

  • 在服务器端,应在注销时手动将未过期的 JWT 标记为无效。即使 JWT 从客户端删除后仍然有效。

JWT 仍然有效

使用的一种方法是令牌黑名单,它涉及在服务器端维护无效令牌列表,防止其重新用于身份验证。

令牌黑名单

  • 对于签名的非加密令牌,我们不应该存储敏感信息,因为 JWT 受到保护以防止篡改,但任何人都可以解码和读取。

  • 如果被拦截,可以提供完全访问权限。因此,客户端的 JWT 应该存储在安全的地方,例如浏览器中的 HttpOnly Cookie。

我的其他文章:



文章来源:https://dev.to/jaypmedia/jwt-explained-in-4-minutes-with-visuals-g3n
PREV
React 技巧与窍门:使用进度条上传文件
NEXT
我就是这样把旧笔记本电脑改造成服务器的。1. 选择操作系统 2. 下载 Ubuntu Server 20.04 并制作一个可实时启动的 USB 盘 3. 启动到 USB 并设置服务器。4. 更改 root 密码 5. 通过 Wi-Fi 连接服务器。6. 安装 Webmin