首先初步了解什么是单点登录,单点登录的技术难点和各种方案,以及各自存在的问题
百度百科:SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
主要功能:
共同的认证系统
所有系统提取,使用认证标识,cookie或其他ticket
最简单的实践方式:
以cookie机制实现。单个域名实现登录,在登录认证成功后,会设置一个cookie保存在浏览器中,之后的请求带着这个cookie,服务器通过获取cookie中的sessionid来校验是否登录过。如果在浏览器打开另一个域名的时候,也需要用户登录,而cookie是不可以跨域的。但是在顶级域名下www.antfoot.dev,的子域名sso1.antfoot.dev,sso2.antfoot.dev是可以共享cookie的
同域名,同服务器下不同子域名实现单点登录
代码1
浏览器测试结果
同域名下,子域名之间可以共享cookie,所有可以通过其中任何一个域名作为认证系统(主域名),那么其他系统就可以通过带着cookie发送请求到服务器,无需再次登录操作即可通过认证。
如果是同域名,不同服务器,不同子域名,那么将session信息存在可以共享的redis或数据库中,以满足统一的认证系统条件
但是,如果是不同域名下,这种简单的实现方案就不可用了,因为cookie是不可跨域的。
对于不同域名,需要一个认证域名,所有请求在程序内重定向到这个认证域名下,认证成功后,设置认证域名下一个cookie,其他域名请求时,先从定向到此认证域名,检索cookie,如果成功,则返回到最终的请求并带上一个认证成功的token,该域名就可以通过这个token记录其登录状态