cas分析

Central Authentication Service
以cas-server-2.0.10版为例。
Class
edu.yale.its.tp.cas.servlet.Login
这是一个处理登录的类,
生成实例时初始化用于登录验证的处理类。
用登录验证:
1、 验证COOKIE(在认证服务器域中),COOKIE中存放ticketID.通过ticketID,可以从缓存中获取具体的ticket实例(存放了用户标识)。
2、 如果通过COOKIE中存放的ticketID从缓存中获取到ticket实例,而且当前不是想重新进行登录认证。就调用grantForService方法。
3、 grantForService会重新生成一个当前这次请求服务的TOKEN(注意ticketID和TOKEN的区别)
4、 确认跳转到其它应用的COOKIE值为enabled/ disabled。那么就转向确认跳转页面或都直接跳转到目的服务地址。目的服务地址通过service参数传递。
==============================================
如果没有记录tookieid的COOKIE,则通过页面传递的用户名和密码进行登录认证(也可以是其它的认证方式)。
登录成功则在认证服务器域上在客户端设置COOKIE(setMaxAge(-1)表示是内存COOKIE不进行保存,浏览器关闭失效)。
edu.yale.its.tp.cas.servlet.ServiceValidate
目标应用程序请求验证当前传递的TOKEN是否合法。
初始化时获取ServiceTicketCache和GrantorCache实例。
ServiceTicketCache中的ticket实例是用于每次访问受限服务时检验访问的服务得到了授权。每进行一次受限服务检证就产生一个实例。在确认成功后删除。一般发生在从一个已登录的服务跳转到另一个受限服务时。
GrantorCache中的ticket实例是登录成功时进行保存。每次进行验证是否登录成功时,只更新其用于超时验证的时间。用户登录一次产生一个实例。

通过传递的service和ticket验证在ServiceTicketCache中存放的ServiceTicket实例是否存在,且其对应的service是否为当前的Service。如果成功就输出一个XML文件。XML中有用户登录标识username.
edu.yale.its.tp.cas.servlet.CacheInit
这是一个监听器,在应用启动后,读取初始化数据。初始化Ticket的超时时间和设置用于认证用的类型(以. edu.yale.its.tp.cas.ticketTicketGrantingTicket为例)。ServiceTicketCache、GrantorCache为单实例。
edu.yale.its.tp.cas.ticket.GrantorCache
extends ActiveTicketCache implements TicketCache
这是一个用于ticket创建、保存、监测超期的类。
监测是用一个后台守护线路定时轮循,如果ticket超期就删除。
保存是通过一个唯一字符串标识与ticket实例(edu.yale.its.tp.cas.ticket.TicketGrantingTicket)进行关联用于确认。

edu.yale.its.tp.cas.ticket .ServiceTicketCache
extends OTUTicketCache
edu.yale.its.tp.cas.ticket.TicketGrantingTicket
认证存放的内容,主要是登录者姓名,是否超期。

交互图:

cas分析_第1张图片

===待续===





你可能感兴趣的:(应用服务器,xml,servlet,浏览器)