跳到主要内容
FreeOnlineTools Go
简体中文
解释

什么是 JWT?JSON Web Token 的完整说明

作者:FreeOnlineTools Team · 更新日期:2026-09-02

快速解答

JWT 是一个字符串,由点分隔的三个 Base64URL 编码部分组成:header.payload.signature。标头指定算法,有效负载包含声明(用户 ID、角色、过期时间),签名证明真实性。 JWT 用于无状态身份验证。使用我们免费的 JWT 解码器检查浏览器中的令牌内容。

介绍

JWT (JSON Web Token) 是 RFC 7519 定义的一种紧凑的 URL 安全令牌格式,用于在各方之间作为 JSON 对象安全地传输信息。 JWT 广泛用于 Web 应用程序中的身份验证和授权:用户登录后,服务器会发出 JWT ,客户端将其包含在后续请求中以证明身份。 JWT 是无状态的——服务器不需要在数据库中查找令牌;令牌本身包含用户的声明和证明其未被篡改的签名。

步步

  1. 理解三部分结构

    JWT 具有三个部分:标头(算法和类型)、有效负载(声明)和签名(证明完整性)。每个部分都经过 Base64URL 编码并用点分隔:eyJhbGciOi...J9.eyJzdWIi...J9.signature。任何拥有令牌的人都可以读取前两部分;只有签名需要密钥。

  2. 了解标准声明

    有效负载包含声明——有关主题的陈述。标准声明:“sub”(主题/用户 ID)、“iat”(在时间戳处发布)、“exp”(过期)、“nbf”(不早于)、“iss”(发布者)、“aud”(受众)。自定义声明可以包括角色、权限或任何其他数据。

  3. 了解签名算法

    JWT 使用对称(HS256 - 共享密钥)或非对称(RS256、ES256 - 公钥/私钥对)签名。签名可防止篡改:更改令牌的任何部分都会使签名无效。只有秘密/私钥的持有者才能创建有效的令牌。

  4. 使用 JWT 进行身份验证

    登录后,服务器创建一个 JWT 并将其发送给客户端。客户端在后续请求的授权标头(承载令牌)中包含 JWT 。服务器验证签名并检查过期情况——无需查找数据库。

示例

JWT 结构

输入: 典型的 JWT

输出: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature

解码标头

输入: 第一部分已解码

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

解码后的有效负载

输入: 第二部分解码

输出: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}

常见问题

  • 解码与验证——解码 JWT (读取其内容)并不能证明它是真实的。在信任声明之前,始终使用密钥验证签名服务器端。
  • 将 JWT 存储在 localStorage 中——这使得 JavaScript 可以访问它们,从而容易受到 XSS 攻击。存储在 httpOnly cookie 中以获得更好的安全性。
  • 长期令牌——如果令牌被盗,它在过期之前仍然有效。将短期访问令牌(15-60 分钟)与刷新令牌一起用于长时间会话。
  • 有效负载中的敏感数据——任何拥有令牌的人都可以读取有效负载(它是 Base64,未加密)。切勿将密码、信用卡或机密信息放入有效负载中。

提示

  • 在信任任何声明之前,始终验证服务器端的 JWT 签名 - 单独解码并不是身份验证。
  • 在长时间会话中使用短期访问令牌(15-60 分钟)和刷新令牌,以最大程度地减少令牌盗窃造成的损失。
  • 将 JWT 存储在 httpOnly、Secure、SameSite cookie 中而不是 localStorage 中,以防止 XSS 攻击。
  • 使用我们的 JWT 解码器检查令牌内容以进行调试 - 您的令牌永远不会离开您的浏览器。

相关工具

相关指南

参考