jwt
token是安装一定规则生成字符串,包含用户信息。规则是怎么样的的,不一定
一般采用通用的规则,官方规则JWT
jwt就是给我们规定好了规则,使用jwt规则可以生成字符串,包含用户信息
Internet服务无法与用户身份验证分开。一般过程如下:
- 用户向服务器发送用户名和密码。
- 验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中。
- 服务器向用户返回session_id,session信息都会写入到用户的Cookie。
- 用户的每个后续请求都将通过在Cookie中取出session_id传给服务器。
- 服务器收到session_id并对比之前保存的数据,确认用户的身份。这种模式最大的问题是,没有分布式架构,无法支持横向扩展。
解决方案 - session广播
- 将透明令牌存入cookie,将用户身份信息存入redis另外一种灵活的解决方案:使用自包含令牌,通过客户端保存数据,而服务器不保存会话数据。 JWT是这种解决方案的代表。
jwt
(
1.Header 头部 记录令牌类型、签名算法等 eg: {“alg”:“HS256” ,“type”,“JWT”}
2.payload 携带一些用户信息 eg: {“userId” : “1” ,“username” : “mayikt” }
3.验证签名 防止Token被篡改、确保安全性
eg: 计算出来的签名,一个字符串+payload通过加密算法算出
)
jwt 优点
1 无需再服务器存放用户的数据,减轻服务器端压力
2 轻量级、json风格比较简单
3 跨语言
缺点
jwt一旦生成后期无法修改:
无法更新jwt有效期
无法销毁一个jwt
session 无法在多个集群服务中共享
Jwt与token最大的区别
token 依赖与Redis 查询数据信息,token存放value数据比较安全。
Jwt不需要依赖于服务器端,将数据信息内容直接存放在客户端(浏览器)
Jwt payload 中数据无法被篡改 验证签名