实现方案:
- cookie id + session
- jwt
- 单点登录
在微服务中的登录设计中,高QPS宽松场景、 低QPS安全准确性设计、性能、一致性、业务特性、改造成本、维护成本
在高QPS中适合,如果使用session方案,登录状态都放在分布式的缓存当中,需要拿token和去和缓存做比较,网络请求开销大,jwt的花销只有解码和校验。
jwt如果保存了权限字段,再过期前都无法被修改,所以一些涉及到管理人员权限严格的系统,例如邮件系统,OA系统,适合session,可以在服务端修改用户权限状态。
一致性的考虑: session 一致性好,服务端修改了立刻生效。
业务特性:jwt适合toC,客户量大的时候; session适合toB。
改造成本:追加一些新功能,例如限制登录数量,限制登录设备,jwt不好做,session在服务端就控制了。
维护成本:session维护成本更大,要考虑与分布式缓存IO性能、内存开销。
结合使用:登录校验使用jwt,用户状态(权限)放在session(redis)。
单点登录
认证中心有一套用户表,可能各个子系统拥有自己的用户表,那就需要子系统的用户和认证中心需要进行映射。
业务场景:适合用户不想在新的业务系统里注册账号,例如使用qq登录wegame。
对认证中心的性能压力大,对接的子系统多的话。
调用链往往比较复杂。
认证中心改造成本大,因为被多个子系统依赖,但单点登录一般有规范设计。