什么是 JWT?
JWT(JSON Web Token)是一种紧凑的、URL 安全的方式,用于在两方之间传递声明。JWT 中的声明被编码为 JSON 对象,并使用加密算法进行数字签名。
快速了解
| 全称 | JSON Web Token(JSON 网络令牌) |
|---|---|
| 创建时间 | 2010 年(2015 年在 RFC 7519 中标准化) |
| 规范文档 | 官方规范 |
JWT 工作原理
JWT 由三部分组成,用点号分隔:头部(Header)、载荷(Payload)和签名(Signature)。头部通常包含令牌类型(JWT)和签名算法(如 HS256、RS256)。载荷包含声明 - 关于用户和附加元数据的陈述。签名是通过编码头部和载荷,然后用密钥签名创建的。JWT 是自包含的,意味着所有必要信息都在令牌本身中,无需在验证时查询数据库。
主要特点
- 自包含 - 令牌内携带所有必要信息
- 紧凑 - 可通过 URL、POST 参数或 HTTP 头发送
- 无状态认证 - 服务器无需存储会话数据
- 数字签名 - 可验证完整性
- 可加密(JWE)以保护机密性
- 有过期时间(exp 声明)以确保安全
常见用途
- Web 和移动应用中的用户认证
- 跨多个域的单点登录(SSO)
- API 授权和访问控制
- 服务之间的信息交换
- 无状态会话管理
示例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuW8oOS4iSIsImlhdCI6MTUxNjIzOTAyMn0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
解码后的载荷:
{
"sub": "1234567890",
"name": "张三",
"iat": 1516239022
}