前言
说说JWT,先说下互联网服务常见的两种用户认证方式:
session认证与Token认证
session认证
传统的Session认证的大体流程可以表示为用户提供用户名和密码登录后由服务器存储一份用户登录信息并传递给浏览器保存为Cookie,并在下次请求中根据Cookie来识别用户,但这种方式缺陷明显:
- Session都是保存在内存中,随着认证用户的增多,服务端的开销明显增大
- 保存在内存中的Session限制了分布式的应用
- Cookie容易被截获伪造
Token认证
Token 泛指身份验证时使用的令牌,Token鉴权机制从某些角度而言与Cookie是一个作用,其目的是让后台知道请求是来自于受信的客户端,其通过实现了某种算法加密的Token字符串来完成鉴权工作,其优点在于:
- 服务器不需要保存 Session 数据(无状态),容易实现扩展
- 有效避免Cookie被截获引发的CSRF攻击
- 可以存储一些业务逻辑所必要的非敏感信息
- 便于传输,其构成非常简单,字节占用小
JWT简介
JWT定义
- JWT全称为Json web token,也就是 Json 格式的 web token,可以这么理解:
Token // 个人证件
JWT // 个人身份证
JWT数据结构
- JWT由三段字符串组成,中间用.分隔,如下:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsInNjb3BlIjo4LCJleHAiOjE3MTU3NDAyMjIsImlhdCI6MTYyOTM0MDIyMn0.wuRsF5wvLHbDF_21Pocas8SeXQ315rgBl6wm1LRL2bQ
- JWT 的三个部分依次如下:
Header(头部)// Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。
Payload(负载)// Payload 部分是一个 JSON 对象,用来存放实际需要传递的数据
Signature(签名)// Signature 部分是对前两部分的签名,防止数据篡改
- 第一段字符串Header:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1Ni