什么是 JWT?
JSON Web Token,通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。
JWT 有什么用?
JWT 最常见的场景就是授权认证,一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求的之前,都要先进行 JWT 安全校验,通过之后再进行处理。
JWT 的组成
JWT 由 3 部分组成,用.拼接
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IlRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE2MjMyMjM2NzUsImp0aSI6ImQ2MTJjZjcxLWI5ZmUtNGMwNy04MzQwLTViOWViZmMyNjExNyJ9.FOS9Y7rYNdc2AOidnSPrgg2XTYePU0yGZ598h2gtabE
这三部分分别是:
-
Header
{ 'typ': 'JWT', 'alg': 'HS256' } -
Payload
{ "sub": '1234567890', "name": 'xmp', "admin":true } -
Signature
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload); var signature = HMACSHA256(encodedString, 'secret');
优点
简洁: 可以通过URL、POST参数或者在HTTP header发送,因为数据量小,传输速度也很快;
自包含:负载中可以包含用户所需要的信息,避免了多次查询数据库;
因为Token是以JSON加密的形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持;
不需要在服务端保存会话信息,特别适用于分布式微服务。
缺点
无法作废已颁布的令牌;
不易应对数据过期。
pom.xml jwt依赖坐标
com.auth0 java-jwt3.13.0
token登录,浏览器f12可以观察到token信息



