JWT : JSON Web Token
JSON Web Token 是一种开放标准(RFC 7519),用于在网络应用环境中 以紧凑且自包含的方式安全地传递信息。常用于身份认证与信息交换。
JWT 实际上确实是明文的,签名只做完整性校验和身份验证。
文章目录
- 使用场景
- 优势
- 结构
- Header
- Payload
- Signature(签名)
使用场景
- 身份认证(Authentication)
- 用户登录后,服务端生成 JWT 并返回给客户端
- 客户端将 JWT 存储在 localStorage 或 cookie 中,后续请求携带 JWT(通常放在 HTTP Header 中)
- 信息交换
两个系统之间安全传递信息(内容经过签名,可以验证真实性)
JWT签名只做完整性校验和身份验证,确保:
token 没有被篡改;token 确实是由服务器签发的(前提是密钥安全)
但它并不会加密 payload,任何人只要拿到 token,就可以解码出其中的数据。
JWE(JSON Web Encryption 加密
):对 JWT 加密(复杂但更安全)
优势
- 无需服务端存储状态(无状态认证)
其实服务器生成一个 token密钥 给客户端,也能认证,不过服务器需要维护这个 token 是谁的。 - 基于标准,跨语言、跨平台
- 自包含(包含所需用户信息)
缺点:
- 不易撤销(除非使用黑名单机制)
- 长 token 可能影响传输性能
- token 一旦泄露,安全风险高
结构
header.payload.signature
Header
{"alg": "HS256","typ": "JWT"
}
- alg 表示签名使用的算法(如 HS256 或 RS256)
- typ 表示令牌类型,固定为 JWT
编码后为 Base64Url 字符串。
Payload
负载
{"sub": "1234567890","name": "Alice","iat": 1516239022
}
- 包含用户信息(如 sub 是主题)
- 可以包括自定义字段,也有一些标准字段(如 exp 过期时间)
Signature(签名)
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret
)
用来验证消息是否被篡改,服务端用密钥对前两部分签名,接收方可验证