单点登录实现思想
微服务项目因为有多个服务器组成,遇到了会话保持问题
在一个服务器上登录,能够让所有服务器知道当前用户的信息的解决方案就是单点登录
单点登录的办法有很多,但是实现思路主要有两种
1.Session共享
2.Token令牌
方法一:session共享
原理:让用户的登录信息共享给所有模块,用户登录时共享session
上图采用session实现单点登录:
基本思路是将用户信息保存到Redis,哪个模块需要用户信息,从redis中取
优点:安全性高
框架支持比较完善,代码编写量少。
缺点:
1.每个模块还有Redis都要消耗较多内存保存用户信息
2.当用户信息更新时,需要比较复杂的操作
方法二:Token令牌
原理 :客户端在登录的时候会生成一个令牌并返回,在之后的每一次请求的时候都会携带令牌
服务器对这个令牌进行解析,认证身份
上图是Token令牌的解决方案
基本思路是用户登录成功颁发令牌,由客户端保存
访问其它服务器时,客户端提供令牌,服务器验证
优点:
1.解放session,服务器不需要再因为用户信息占用内存
2.客户端保存令牌,方便响应客户端变化
缺点:
1.解析和颁发令牌需要Cpu消耗算力
2.绝对安全的业务,需要再次验证
这俩种单点登录的实现方式,各有优缺点,具体项目中还要根据实际项目进行选择