会话机制

服务器端在客户端第一次访问的时候把sessionid给到客户端的cookie,客户端存储后,下次再访问时请求头会带上cookie里的信息。

登陆机制

image.png

image.png
image.png

cookie的局限性

不同域名cookie是存放在不同的地方,在访问A域名是,cookie是不会把B域名下的cookie给发送过去的。当然,也有人想到说使用一个顶级域名,确实有公司这么做过,但是实际上是有问题的,不同语言的cookie值是不能通用的,并且cookie也不安全。

image.png

image.png

image.png

登录原理

image.png
SSO服务器创建全局会话,单系统根据全局会话状态之后创建局部会话。

image.png
image.pngimage.png
image.png
接下来登录到SSO服务器,SSO服务器创建一个token,唯一标识即可,并且保存到数据库中用于下次验证,然后把sessionid和token一并返回给客户端,客户端把sessionid存储到本地cookie
image.png

image.png

接下来重定向到业务系统
image.png

业务系统向SSO服务器系统验证token是否有效
image.png

SSO服务器返回响应结果,并且在业务系统中,把登录状态设置为true,业务系统登录成功后,还需要向SSO服务器的一个数据库表中添加业务系统的登录信息。

image.png
image.png
image.png

第二次及后续请求
image.png

下面访问第二个业务系统,先找本地cookie中有没有指定系统的session对象。
image.png
会重定向到SSO服务器,此时会找到SSO服务器的域名下的cookie信息,直接登录,然后把token返回给第二个业务系统

image.png
image.png

重定向到第二个业务系统
image.png
第二个业务系统请求SSO服务器验证token有效性
image.png

验证成功后把当前系统的登录状态设置为true,把JSESSIONID返回给客户端
image.png

第二次及以后再次登录
image.png

注销原理

一个系统注销,其他系统全部注销。 在业务系统注销时,会重定向到SSO服务器,然后SSO服务器这里需要找到对应系统的sessionid全部进行注销.因此,在调用token的时候,SSO服务器就应该把相关业务系统的sessionid存储下来。
image.png

这里表示当时登录成功的时候,需要另外一张表把token和业务系统关联起来。把表中的已经登录的所有系统进行注销
image.png