1 什么是JWT
JWT,全称是Json Web Token, 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;它是前后端分离开发方式下,权限校验的标准解决方案。
JWT的token包含三部分数据:
-
Header:头部,通常头部有两部分信息:
-
- 声明类型,这里是JWT
- 加密算法,自定义
我们会对头部进行base64加密(可解密),得到第一部分数据
-
Payload:载荷,就是有效数据,一般包含下面信息:
-
- 用户身份信息(注意,这里因为采用base64加密,可解密,因此不要存放敏感信息)
- 注册声明:如token的签发时间,过期时间,签发人等
这部分也会采用base64加密,得到第二部分数据
- Signature:签名,是整个数据的认证信息。一般根据前两步的数据,再加上服务的的密钥(secret)(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性
JWT优点(无状态登录的优点):
-
服务端不保存任何客户端请求者信息
-
客户端的每次请求必须携带token(token--jwt),通过token信息识别客户端身份
-
客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务
-
服务端可以任意的迁移和伸缩
-
减小服务端存储压力
JWT的缺点:
- 一旦颁发,无法收回,只能等待过期,自动收回
- 敏感信息不要放在token
2 项目中是如何使用JWT的?
分为两大步:
第一步:颁发token
1、用户通过用户名和密码进行身份认证
2、身份认证通过,生成token,返回给客户端
3、客户端保存token
第二步:校验token
1、每次请求的时候,将token携带到服务器
2、gateway对token进行校验,校验通过,则放行,校验失败,则拦截