JWT Token 详解:原理、结构与安全实践

最后更新:2026年5月 · 阅读时间:12分钟

在线 JWT 解码工具

粘贴 JWT Token,实时查看 Header 和 Payload 内容

打开 JWT 解码器

什么是 JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 JSON 对象。它通常用于身份验证和信息交换。

JWT 的核心思想:用一串编码字符串同时携带数据和签名验证,使接收方可以验证数据的完整性。

一个典型的 JWT 看起来像这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuW8oOS4iSIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

它由三部分组成,用 . 分隔:Header、Payload、Signature。

JWT 的结构

1. Header(头部)

Header 包含两部分信息:

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

Header 使用 Base64URL 编码后成为 JWT 的第一部分。

2. Payload(载荷)

Payload 包含声明(Claims),即要传输的数据:

{
  "sub": "1234567890",
  "name": "张三",
  "iat": 1516239022
}

标准声明字段:

字段含义
iss签发者(Issuer)
sub主题(Subject)
aud受众(Audience)
exp过期时间(Expiration)
nbf生效时间(Not Before)
iat签发时间(Issued At)
jtiJWT ID

重要:Payload 只是 Base64 编码,不是加密。任何人都可以解码查看内容,不要在 Payload 中存放密码、密钥等敏感信息!

3. Signature(签名)

签名用于验证消息的完整性和来源:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

签名确保 JWT 没有被篡改。持有密钥的一方才能生成有效签名。

JWT 的工作流程

  1. 用户使用账号密码登录
  2. 服务器验证成功后,生成 JWT 并返回给客户端
  3. 客户端将 JWT 存储在本地(通常放在 localStorage 或 Cookie 中)
  4. 后续请求在 Authorization 头部携带 JWT:Authorization: Bearer <token>
  5. 服务器验证 JWT 签名和有效期,通过后处理请求

使用场景

1. 身份认证(最常见)

用户登录后获取 JWT,后续请求携带 JWT 证明身份。相比 Session,JWT 不需要服务器存储状态,天然支持分布式系统。

2. 信息交换

JWT 可以安全地在系统间传递信息,因为签名可以验证数据未被篡改。

3. 单点登录(SSO)

JWT 的无状态特性使其非常适合 SSO 场景,一次登录即可访问多个系统。

安全注意事项

不要在 Payload 中存放敏感数据

任何人都可以用 Base64 解码查看 Payload 内容。密码、密钥等敏感信息绝不能放入 JWT。

设置合理的过期时间

JWT 一旦签发就无法撤销(除非配合黑名单),因此必须设置 exp 过期时间。建议:

使用强密钥

HS256 密钥至少 256 位(32 字节),RS256 使用至少 2048 位的 RSA 密钥对。

选择合适的算法

算法类型适用场景
HS256对称加密单一服务,简单快速
RS256非对称加密微服务,需要多方验证
ES256椭圆曲线需要更短令牌的场景

防止常见攻击

常见问题

JWT 和 Session 有什么区别?

特性JWTSession
存储位置客户端服务端
扩展性天然支持分布式需要共享存储
撤销困难(需黑名单)直接删除
大小较大(KB级)仅 Session ID
跨域方便需要额外处理

JWT 可以被撤销吗?

标准 JWT 无法直接撤销。常用方案:1)设置短过期时间 + Refresh Token;2)维护 Token 黑名单;3)在 Payload 中加入版本号,在服务端校验。

JWT 应该存在哪里?

提示:使用我们的在线 JWT 解码器可以快速查看任何 JWT 的 Header 和 Payload 内容。

试试我们的 JWT 工具

粘贴 JWT Token,实时解码查看内容

打开 JWT 解码器