以上CAS的登录流程图
原理是:第一步:用户访问A系统,A系统查看用户是否有JSession或者Ticket票据,如果没有,这说明还没有登录,如果有其中一个就说明已经登录。
第二步:A系统发现用户没有登录,则重定向到认证中心,并且将用户的客户端地址作为参数传递到认证中心,这时认证中心将执行获取全局票据的操作,如果没有则会呈现登录页面让用户进行登录。
第三步:用户登录成功后,CAS服务器会创建全局会话TGT,TGT位于CAS服务端,TGT并没有放在Session中,也就是说,CAS全局会话的实现并没有直接使用Session机制,而是利用了Cookie自己实现的,并且将TGT的id缓存在浏览器cookie中(TGC),同时会产生一个随机的 Service Ticket (ST),并且重定向到A系统,并且携带ST,重定向之后的地址变为:http://a:8080/?ticket=ST-XXXX-XXX。
第四步:此时A系统会再次进行登录检查,验证ST(票据)有效之后,CAS会返回当前用户信息,A系统接收到用户信息后,会为该用户创建Session局部会话,会话id由cookie维护,保存在浏览器中,来证明其已登录。以后都通过局部会话ID与系统交互。
第五步:系统A将受限资源返给用户。至此,用户向系统A发送一个请求的流程已经完成。这个时候,如果用户向系统A发送另外一个请求,因为系统A和浏览器之间已经创建了一个局部会话,因此这时候会直接返回资源。