序幕
单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
两个站点如果在同域下,那么它们之间是可以共享cookie的。简单的说就是这种同域下不同站点的sso实现可以通过cookie来实现,当用户访问这个域下面的任意站点时,浏览器都会将这个cookie发送给站点对应的系统。
实现原理
实现效果
比如阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。
简单来说,单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。
实现方式
第一种方式:凭借cookie,应用间的重定向
这种方式比较简单,当用户在上面三个站点中的任意一个站点登录成功时,必须在浏览器中同时设置其他站点的cookie信息。
例如:当用户登录site1站点,并且验证通过之后,浏览器会存储一份site1站点的cookie信息,这时,为了实现单点登录(为了在site2站点和site3站点无需登录),那么我们需要在浏览器设置site2站点和site3站点的cookie信息,因此,在用户登录site1站点的请求响应之前,需要从siteId1站点重定向到site2站点和site3站点去设置cookie信息,这样就可以保证,在任意站点登录成功之后,在浏览器也有其他站点的cookie信息。下图可具体展示其中流程:
这种方式其实过程比较简单,只需要确保登录其中一个站点在浏览器设置cookie其他站点都在浏览器设置对应cookie,就可以实现单点登录了(单点退出是一样的道理,一个退出清除cookie,其他也清除)。
但是这种方式有一个非常明显的缺点是:这里举例是3个站点,如果是几十个上百个站点再使用这种方式将非常影响效率。
第二种方式:借助单独的SSO服务器
这种方式需要借助一个单独的SSOServer,相对于上一种方式,这种方式就不需要将每个站点的cookie信息都保存在浏览器上,浏览器只需要保存SSOServer的cookie信息。将这个cookie信息用于需要做单点登录的所有站点中。
对于这种方式,在浏览器对于任意一个站点的请求都将会先重定向到SSOServer去验证代表当前用户的cookie是否存在,如果存在,那么将验证成功后的跳转页面发送给浏览器,否则将跳转到登录页面提示用户登录。可参考如下图
由于site1和site2的单点登录与site1、site2、site3之间的单点登录是同样道理的(因为登录site1后去访问site2和site3的流程都是相同的),所以,这里借助site1和site2的单点登录来说明这种方式。