-
什么是JWT
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). 该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份 提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它 业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
-
JWT格式
JWT是一串字符串,类似下面的格式: xxxxx.yyyyy.zzzzz分别表示为: Header.Payload.Signature Header { "alg": "HS256", "typ": "JWT" } Payload { "sub": "1234567890", "name": "John Doe", "admin": true } Signature HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
-
引入maven依赖
com.auth0 java-jwt 3.11.0 -
生成令牌
Calendar instance = Calendar.getInstance(); instance.add(Calendar.SECOND, 20);
Map<String, Object> header = new HashMap<>(); String token = JWT.create() .withHeader(header) .withClaim("userId","zhangsan")//payload .withClaim("conutry", "CHINA")//payload .withExpiresAt(instance.getTime()) //设置过期时间20S .sign(Algorithm.HMAC256("!Token@123")); //签名
System.out.println("令牌:" + token);
-
校验token
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("!Token@123")).build(); DecodedJWT verify = jwtVerifier.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJ6aGFuZ3NhbiIsImNvbnV0cnkiOiJDSElOQSJ9.mV7juDaiNZgn0BFW8sIjYPHiP2qxsHnjseenYZX7WJs"); System.out.println(verify.getClaim("userId").asString()); System.out.println(verify.getClaim("conutry").asString());