token
token的认证流程:
- 用户输入用户名和密码,发送给服务器,服务器验证账号密码成功
- 服务器生成令牌,本质是一个唯一字符串,可以使用uuid
- 将该令牌存到数据库或redis中,key是uuid,value是用户信息
- 把令牌返给客户端
- 下次请求的时候就把令牌放在请求头里带上
- 从数据库或redis中验证该令牌是否过期
- 没有过期获取value内容user信息
优点
- 可以隐藏真实数据,安全系数高
- 适用于分布式/微服务
- token支持手动控制,过期、吊销等
- 可以实时查询现有token
缺点
- 存放在数据库或者redis,依赖服务器资源
- 效率相对jwt比较低
JWT
概念
JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证
JWT的认证流程:
- 用户输入用户名和密码,发送给服务器,服务器验证账号密码成功
- 服务器使用签名秘钥生成jwt,把用户id放到jwt中
- 把令牌返给客户端
- 下次请求的时候就把令牌放在请求头里带上
- 服务器使用签名秘钥验证jwt是否有效
- 有效后可以从jwt中获取到用户id
优点
- token自身包含用户信息且无法篡改,数据实际保存在客户端,所以我们可以分担数据库或服务器的存储压力
缺点
- 建议不要放敏感数据
- Jwt生成之后无法修改(发生变化)
- 后端无法统计生成jwt
- 无法吊销令牌,只能等待令牌自身过期
- 令牌长度与其包含用户信息多少正相关,传输开销较大
- Jwt是无状态的,如果别人获取到了,别人也能用