JWT (json web token)是当前最流行的用户登录权限校验(用户认证鉴权)方案。
官网 https://jwt.io/
JWT 的工作流程
- 客户端填写账号密码访问登录接口 login,将账号密码传给服务端
- 服务端验证账号密码是否正确,若正确,则生成 token ,并将其返回给客户端
- 客户端将登录接口 login 返回的 token 存储在客户端本地
- 客户端访问业务接口(如获取当前登录用户信息 user/current)时,将 token 放入 header 中传给服务端,键名为 Authorization ,值为 Bearer 后加空格再加 token。
- 服务端验证 token 是否正确,若正确,则将数据(如当前登录用户信息)返回给客户端。
JWT 的 token 加密原理
JWT 的 token 由三部分组成
- Header:JSON对象,描述 JWT 的元数据,加密算法以及类型
- Payload:JSON对象,存放数据需要传递的数据
- Signature:对前两部分的签名,防止数据篡改。需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。
如上图,可在官网首页中测试加密和解码 https://jwt.io/
JWT 的优点
- token 是无状态的(stateless),服务器不需要记录任何信息,不占用内存
- 多进程,多服务器集群没有影响,易于扩展
- 假如不记录在 cookie 中,没有跨域的影响
- 和服务器端解耦,任何设备都可以生成token。
JWT 的缺点
- 无法废弃,没有办法对快速对已经登录的用户做处理。
- 空间更大,所有数据是通过 base64进行编码的,会随着数据量的增大而变大。