JWT介绍
介绍JWT之前先说一下为什么需要JWT?
为什么需要JWT?
由于HTTP是无状态协议,而服务端其实需要知道部分的客户端信息来识别身份,所以之前我们在javaweb中经常使用session和cookie来进行会话管理,从而找到用户信息。但是cookie和session的方式存在一些问题
服务端保存大量数据,增加了服务端的压力
服务端保存用户状态,不支持集群化部署
当然使用redis存储session解决了这些问题。
但是Restful风格的接口其实有个规范就是服务的无状态性。
- 服务端不保存任何客户端请求者信息
- 客户端的每次请求都必须具备自描述信息,通过这些信息识别用户信息
如何实现无状态?
既然要使用无状态,那么如何才能实现无状态呢?说一下简单地流程
- 登录时通过客户端发送账号和密码进行认证
- 认证通过后,服务端将用户信息加密且编码成一个token,返回给客户端
- 之后客户端每次发送请求,都需要携带认证的token
- 服务端对客户端发送来的token进行解密,判断是否有效,并且获取用户登录信息
而JWT就是一种JSON风格的轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权
JWT组成
JWT由三部分组成
- 头部(header)
- 载荷(payload)
- 签名(signature)
头部
头部包含两个信息
- 声明类型
- 声明加密算法
1 | { |
载荷
就是具体存放的消息内容
1 | { |
签名
是整个数据的认证信息,一般通过前两个数据,再加上秘钥,通过Header中配置的加密算法生成,用于验证整个数据完整性和可靠性
1 | HMACSHA256( |
由三部分组成
- base64加密后的header
- base64加密后的payload
- 秘钥