会话机制
服务器端在客户端第一次访问的时候把sessionid给到客户端的cookie,客户端存储后,下次再访问时请求头会带上cookie里的信息。
登陆机制
cookie的局限性
不同域名cookie是存放在不同的地方,在访问A域名是,cookie是不会把B域名下的cookie给发送过去的。当然,也有人想到说使用一个顶级域名,确实有公司这么做过,但是实际上是有问题的,不同语言的cookie值是不能通用的,并且cookie也不安全。
登录原理
SSO服务器创建全局会话,单系统根据全局会话状态之后创建局部会话。
接下来登录到SSO服务器,SSO服务器创建一个token,唯一标识即可,并且保存到数据库中用于下次验证,然后把sessionid和token一并返回给客户端,客户端把sessionid存储到本地cookie
接下来重定向到业务系统
业务系统向SSO服务器系统验证token是否有效
SSO服务器返回响应结果,并且在业务系统中,把登录状态设置为true,业务系统登录成功后,还需要向SSO服务器的一个数据库表中添加业务系统的登录信息。
第二次及后续请求
下面访问第二个业务系统,先找本地cookie中有没有指定系统的session对象。
会重定向到SSO服务器,此时会找到SSO服务器的域名下的cookie信息,直接登录,然后把token返回给第二个业务系统
重定向到第二个业务系统
第二个业务系统请求SSO服务器验证token有效性
验证成功后把当前系统的登录状态设置为true,把JSESSIONID返回给客户端
第二次及以后再次登录
注销原理
一个系统注销,其他系统全部注销。 在业务系统注销时,会重定向到SSO服务器,然后SSO服务器这里需要找到对应系统的sessionid全部进行注销.因此,在调用token的时候,SSO服务器就应该把相关业务系统的sessionid存储下来。
这里表示当时登录成功的时候,需要另外一张表把token和业务系统关联起来。把表中的已经登录的所有系统进行注销