什么是token?什么是JWT?如何基于token进行身份验证?
我们都知道session信息需要保存一份在服务器端。这种方式会带来一些麻烦,比如需要我们保证保存session信息服务器的可用性、不适合移动端等。
有没有一种不需要自己存放session信息就能实现身份验证的方式?使用token就可以!!!JWT就是这种方式实现的,通过这种方式服务器端就不需要保存session数据了,只要在客户端保存服务端返回给用户token就可以了,扩展性得到提升。
JWT本质上就是一段签名的JSON格式的数据。由于他是带有签名的,因此接受者便可以验证他的真实性。
jwt由三个部分组成:
- header:描述JWT的元数据。定义了生成签名的算法以及token的类型
- payload(负载):用来存放实际需要传递的数据
- signature(签名):服务器通过payload、header和一个密钥使用header里面指定的签名算法(默认HMAC SHA256)生成
以登录操作为例,大致流程如下:

用户向服务器发送用户名和密码用于登录系统。
身份验证服务响应并返回了签名的jwt,上面包含了用户是谁的内容。
用户以后每次向后端发送请求都在header中带上了jwt。
服务端检查jwt并从中获取用户的相关信息。
public class JWTUtils {
public static String SERSTR = "this is a key";
public static String createJWTWithJSONType(Object obj) {
System.out.println(obj);
String str = JWT.create()
.withClaim("token", JSON.toJSONString(obj))
.withExpiresAt(new Date(System.currentTimeMillis() + 30*60*1000))
.sign(Algorithm.HMAC256(SERSTR));
System.out.println("Comment:str "+str);
return str;
}
public static DecodedJWT decode(String token) {
DecodedJWT decodedJWT = JWT.require(Algorithm.HMAC256(SERSTR)).build().verify(token);
return decodedJWT;
}
}








![[附源码]SSM计算机毕业设计在线学习网站的设计与实现JAVA](https://img-blog.csdnimg.cn/8f62bf07f1014ac4b3838fa65b9822ab.png)



![[附源码]java毕业设计水果商城](https://img-blog.csdnimg.cn/5388538baa6d487eb668422cfdcb0305.png)






![[每周一更]-(第21期):什么是RPC?](https://img-blog.csdnimg.cn/8da0fa88284246739efdd771ef8aeb07.png#pic_center)