一、传统token
例子:传统token登陆过程
-
前端点击登陆,服务器验证账号密码成功
-
服务器生成令牌,本质是一个32位的uuid
-
将该令牌存到数据库或redis中,key是uuid,value是userId
-
把令牌返给客户端,客户端把令牌存在cookie中。
-
下次请求的时候就把令牌放在请求头里带上
-
从redis中验证该令牌是否过期
-
获取value内容userId
-
根据userId查询用户信息,再返回客户端
传统token优缺点
优点:
-
可以隐藏真实数据
-
适用于分布式/微服务
-
安全系数高
缺点:
-
存放在redis,必须依赖服务器,暂用服务器资源
-
效率非常低
二、JWT
例子:JWT登陆过程
Jwt优缺点有那些
优点:
-
无需服务器端存放数据,减轻服务器端的压力
-
占用带宽比较小、跨语言
-
token自身包含用户信息且无法篡改,在服务(网关)中可以自行解析校验出用户信息,对认证服务器(account-svc)压力小
缺点:
-
建议不要放铭感数据 userid、手机号码(如果非要放userId,deptId等信息,可采用rsa256算法加密)RSA256生成Jwt
-
Jwt生成之后无法修改(发生变化)
-
后端无法统计 生成jwt
-
无法吊销令牌,只能等待令牌自身过期
-
令牌长度与其包含用户信息多少正相关,传输开销较大
-
Jwt是无状态的,如果别人获取到了,别人也能用