JWT (JSON Web Token) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。JWT 由三个部分组成,通过点(.)分隔:
-
Header (头部):包含两部分信息:令牌类型(通常是 JWT)和使用的签名算法(如 HS256、RS256 等)。Header 是一个 JSON 对象,经过 Base64Url 编码。
-
Payload (载荷):包含声明(Claims),即关于实体(通常是用户)和其他数据的声明。声明分为三类:
- 注册声明(Registered Claims):如 iss(签发者)、exp(过期时间)、sub(主题)、aud(受众)等
- 公共声明(Public Claims):可以自定义,但应避免冲突
- 私有声明(Private Claims):在同意使用它们的各方之间共享信息的自定义声明 Payload 也是 JSON 对象,经过 Base64Url 编码。
-
Signature (签名):用于验证消息在传递过程中未被篡改。签名是通过将编码后的 Header 和 Payload 用点连接,然后使用 Header 中指定的算法和密钥进行签名生成的。
JWT 的完整格式为:Header.Payload.Signature
例如:
shelleyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT 的主要特点:
- 紧凑:可以通过 URL、POST 参数或 HTTP header 发送
- 自包含:包含所有必要信息,减少数据库查询
- 跨语言支持:多种编程语言都有实现
- 无状态:服务器不需要存储会话信息
JWT 常用于身份验证和信息交换,特别适合分布式系统的单点登录(SSO)场景。