概述
SSO(Single Sign On),单点登录,多个具有独立运行的系统组成一个大系统,实现用户登录一次,即可随意访问该大系统的子系统。单点登录的具体实现有多种方式,我们可以自己实现,也可以采用第三方提供的框架。
自定义SSO
方式一
部署图
具体实现过程
1、用户通过浏览器,输入用户名和密码进行登录
2、权限系统接收到用户名和密码后,进行校验,校验通过后,将相应的用户信息,写入到Cookie中
3、登录后的用户此时访问考试系统时,考试系统先从Cookie中获取相应的值,然后判断其是否登录
小结
这个过程,我们可以非常清楚的知道,这样做不安全,因为用户的信息存放在Cooike上,所以,非常的不安全。
方式二
部署图
流程描述
这个流程和上面的流程几乎一样,不一样的地方就是用户信息的存放地方,方式一是将用户信息直接存放到Cookie上,方式二是将用户信息存放到Radis上,然后,用户访问考试系统时,系统从Cookie中获得相应的值,然后,通过这个值,从Radis中获取相应的用户信息,判断用户是否登录。
小结
方式二虽然解决了方式一的一个不足,但是,对于这两种方式都存在的一种不足,它没有解决,这个不足就是Cookie,Cookie值得获取是有一定的要求的,域名规范等等,使用时,具有很大的限制,例如:权限系统是域名1,那么,考试系统必须是这类(定好的规则)域名时,才可以获取Cookie的值。
第三方框架CAS
部署图
看到这幅图后,你一定很惊讶,这个和自己实现的第二种方式,非常的相似,唯一不同的Redis服务器变成了CAS服务器,对,非常的对,但是,也就是因为这个不同,就解决了那个问题。注意,此时具体系统都引入CAS相应的jar了
流程描述
1、用户输入用户名和密码,登录
2、权限系统中的CAS的过滤器拦截后,让其转发到CAS服务器
3、转发到CAS服务器后,CAS看有没有Cookie,没有的话,说明没有登录过,此时,就给Cookie中写入CAS的值,并返回钥匙,然后,让浏览器带着钥匙转发到权限系统,然后,权限系统中的CAS再拿着钥匙和CAS服务器进行验证,验证通过,CAS服务器将用户的信息返回给权限系统,且登录成功。
4、用户转到考试系统时,考试系统的过滤器拦截,看是否具有钥匙,不具有的话,就重复2和3操作,有的话,直接和CAS服务器进行验证,通过后,CAS服务器将用户信息返回给考试系统,进入成功
小结
CAS解决Cookie取值限制的方式时,让CAS服务器放Cookie值,并且,让CAS服务器取值,当然,这里面也要有子系统的CAS的jar进行的转发和验证操作。
总结
CAS服务器端各种验证规则,客户单单点注销,对用户操作等具体操作,在这里就不再描述,现提供相应的代码,有兴趣的话,可以下载下来看看。