CAS单点登录浅析(一)——实现思路

CAS是Central Authentiction Service 的缩写,中央认证服务,一种独立开放指令协议.CAS是Yale大学发起的开源项目.旨在为Web应用系统提供一种可靠的单点登录方法,CAS在2004年12月正式称为JA-SIG的一个项目.

 特点:
  1.开源的企业级单点登录解决方案.
  2.CAS Service为需要独立部署的Web应用.
  3.CAS Client 支持非常多的客户端(这里指单点登录系统中的各个Web应用),包括Java .NET PHP等

首次登录验证,其原理如下图所示:
CAS单点登录浅析(一)——实现思路_第1张图片
1、第一次跳转:客户端访问应用系统,应用系统判断Session发现为定路,返回302跳转到sso登录页面,并传递service参数给sso,该service参数有两个作用:
2、service一般传递应用系统url地址,用于sso认证通过后回跳到应用系统;
3、service参数同时会被cas服务端的作为cas客户端的唯一标记记录下来,用于后期匹配相应的认证凭据;
4、第二次跳转:浏览器显示登录页面,用户输入账号密码登录成功后,sso会返回302跳转回到原来请求的应用系统页面,并携带ticket参数,作为认证票据,同时通过Set-Cookie向浏览器记录TGT,(TGT的作用将在下一个应用系统需要登录的时候体现出来,是避免重复登录的关键)
5、一次后台验证:应用系统接收到带有ticket的请求后,向从后台直接向sso服务器发起一个http请求,将service和ticket作为参数,用于验证ticket的有效性;如果ticket有效,sso服务器将返回该ticket对应的登录用户名。

已完成登录验证切换到其他系统时,其原理如下图所示:
CAS单点登录浅析(一)——实现思路_第2张图片
1、当用户已经登录过一个应用系统以后,在同一个浏览器上访问第二个应用系统,根据单点登录的要求此时不应该再登录,而是直接进入第二个系统。但是实际上还是需要经过两次前端跳转、一次后端验证,只不过此时的两次跳转是连续的,中间不会再出现登陆页面,用户感受不到。判断的依据就是前面第4步通过Set-Cookie保存到客户端的TGT(Ticket Granted Cookie )。
2、相比首次访问,少了之前的第3步(不需要再出现登录页面),因为此时在第二步跳转时,携带了之前保存的TGT,cas服务端通过TGT可以得知用户信息,因此直接生成ticket返回给应用系统。所以此时是两次连续的302跳转,用户看到的效果就是直接进入第二个应用系统了。

CAS源码解析-cas相关的jar包
CAS单点登录浅析(一)——实现思路_第3张图片
1、系统接收到请求首先经过web.xml,通过web.xml中SafeDispatcherServlet进行映射找到cas-servlet.xml.2、cas-servlet.xml中主要包含了两种控制层映射方式。handlerMappingC和FlowHandlerMaping。根据两种不同的映射方式找到对应的服务。
3、以退出登陆为例/logout,通过springbean关系可以找到退出的登陆页面。退出成功后进入/login登陆页面。
4、/login 采用了FlowHandlerMaping方式,通过login-webflow.xml文件可以看到cas登陆的整个过程。on-start(start-state)流程开始,end-state流程结束 decision-state判断,类似于if,view-state对应jsp页面 action-state对应执行程序的某段。

你可能感兴趣的:(cas,单点登录,分布式系统,交互设计,登录组件)