CAS 单点登录简单理解
cas的思路就是,用一个过滤器作为cas客户端在所有请求前面拦截,这个客户端和cas服务端来管理应用的session(用户登录)。
1.流程就是,用户访问应用A请求来了,cas客户端在自己的map里看看登录过没,如果没有就让浏览器重定向到cas服务端去。(把当前请求地址作为参数传递)
2.服务端看请求来了,看这个请求带TGC这个cookie没得,如果没带,说明没在服务端这边登录过,就返回一个登录页面给用户的浏览器
3.用户在浏览器上输入统一登录的那个用户名和密码
4.cas服务端验证用户名密码,没问题,就返回给浏览器返回给浏览器响应:1重定向到之前访问应用A的地址,2带上一个ticket参数,3给浏览器一个cookie就是TGC。
5 浏览器接受到这个重定向的响应就再去发请求给应用A
6 应用A的cas客户端过滤器接到这个请求,一看有ticket,就发请求去cas服务器那边,验证这个ticket,cas服务器收到这个ticket,验证通过,就会把用户名响应回去。
7 应用A接受到这个用户名,根据开发自定义的一个接口实现类,把用户名转成应用A的用户名,再用调用这个类的登录初始化方法,把用户登录了。
8 客户端过滤器工作完成,放行之前对应用A的请求,就返回给浏览器最开始想访问的页面了。
-----------A应用完成单一登录-----------
这个时候如果用户想访问应用2
第1步一样;
第2步有TGC,就不用返回一个登录页面了,直接返回给浏览器重定向到应用2了。之后也一样了。
-------------B应用完成单一登录----------
-------------单一登出---------------------
CAS还有单点登出功能,cas服务端会记住所有来登录过的应用,当登出发生的时候会挨个去发请求,请求里有一个登出的参数,cas客户端的过滤器读到这个信号后会做登出操作。
登出事件可以在cas服务器提供的页面进行,也可以在各个应用进行。如果想A应用在登出的时候,发起单点登出事件,就要配置cas提供session监听,原理就是应用A在session销毁的时候,会发起请求到cas服务器,告诉服务器发起单一登出事件。
------------代理模式---------------------
这个这里不细谈了,其他地方讲得很多,应用也不是很广,主要是portal上。
我个人觉得,这种代理模式必须在代码里修改并控制访问的过程,改造太大,意义值得商榷。
下面是官网上代理模式的时序图:


浙公网安备 33010602011771号