单点登录
基本是通过cookie和sessionid实现登录状态保持的。
cookie是以key-value的形式保存在浏览器端的。但是cookie是有域名边界的,就是说同一个根域名(比如*.baidu.com)下可以共享cookie,但是不同的根域名就不行了。
sessionid就是一个键值对,不同的语言和web服务器使用的session键值不一样,例如Tomcat服务器的值JSESSIONID,但是其他服务器就不是这个值了,所以不能跨不同的服务器。
所以如果说整个系统使用统一的根域名,并且所有的后台系统都适用同样的服务器,那么利用上面两个,如果是多实例的,再加上Redis的session功能是可以实现单点登陆的。
但是对于不同的根域名,并且后端采用不同的web服务器的话,就要依赖SSO了,有一个专门认证的服务器。所有的请求都会先请求认证服务器,服务器根据登录信息返回加密的Data和Token。然后返回给浏览器并重定向到实际的应用服务器上,请求连接上带有Data和Token,应用服务器使用公钥证书将Data和Token信息解密出来,并用以认证,认证成功,就会产生一个sessionid,之后该请求端就可以一直使用该sessionid来持续访问该应用服务器,如果应用服务器是多实例的,则可以使用Redis来实现session共享。