Spring Security 的 jwt 与 token+redis方案

1. 去中心化的JWT token
优点:

  1. 去中心化,便于分布式系统使用
  2. 基本信息可以直接放在token中。 username,nickname,role
  3. 功能权限信息可以直接放在token中。用bit位表示用户所具有的功能权限。

缺点:服务端无法主动让token失效

2. 中心化的 redis token / memory session等

优点:服务端可以主动让token失效

缺点:每次都要进行redis查询。占用redis存储空间。

这里 redis存储的是token的白名单。用户的其他信息也要放在redis中存储。需要占用较大的redis空间和查询次数。

3. 优化方案:

  1. Jwt Token中,增加TokenId字段。
  2. 将TokenId字段存储在redis中,用来让服务端可以主动控制token失效
  3. 牺牲了JWT去中心化的特点。
  4. 使用非对称加密。颁发token的认证服务器存储私钥:私钥生成签名。其他业务系统存储公钥:公钥验证签名。

这里的redis只存储tokenId的黑名单,同时redis也可以分布式部署,读写分离。token认证服务器操作redis的master,其他redis同步master的数据

 

 

https://www.zhihu.com/question/274566992

你可能感兴趣的:(Spring)