CAS 前补习Kerberos
Kerberos首先生成一个公用密匙,以及为每个客户机分配一个临时密匙,临时密匙需要与一个密匙检测器绑定,要来检测该密匙的合法性,如:密匙有效期,密匙所属的对象,
检测进行:
从未登录过,请求CAS 受保护的Client
服务器端接收到客户端的请求,首先获得SSO Server数据,主要是存储在Server 目录下的 Cookie——TGT
org.jasig.cas.web.flow.InitialFlowSetupAction |
设置WebApplicationService,主要设置来访者信息。
org.jasig.cas.web.support.ArgumentExtractor |
进入GenerateServiceTicketAction 检测TGT是否存在,如果存在TGT则创建新的ST,如果不存在抛出异常,返回到login页面。
org.jasig.cas.web.flow.GenerateServiceTicketAction |
返回到登录页面,提示用户输入用户名,密码。点击提交后进行逻辑处理
org.jasig.cas.web.flow.AuthenticationViaFormAction |
1. 首先获得SSO Server的TGT,已经来访者信息Service
final String ticketGrantingTicketId = WebUtils.getTicketGrantingTicketId(context); final Service service = WebUtils.getService(context); |
...................exists new server.....................
2. 创建一个新的TGT,通过credentials
WebUtils.putTicketGrantingTicketInRequestScope(context, this.centralAuthenticationService.createTicketGrantingTicket(credentials)); |
3. 创建新TGT前,首先需要验证credentials,如何验证credentials?
1. 需要验证正确的用户名和密码,需要通过AuthenticationManager来验证,验证时需要给定一个Credentials,而UsernamePasswordCredentials 实现了这个接口,
UsernamePasswordCredentials也就是封装了username与password的凭证。这个凭证在CAS中是通过Spring创建的。具体的创建需要与Spring WEB 相关。
如何验证一个Credentials呢?请查阅UML图:
2.假如当凭证验证为真时,系统就需要创建一个TGT,也就是服务器授权票据。但是授权票据TGT的创建需要如下的参数:(请看构造方法)
1. Id表示具体的TGT
那么Id如何生成?
i. 这里DefaultUniqueTicket有两个构造参数
ii. maxLength 代表需要生成的字符个数,而这个在CAS中是使用
applicationContext.xml中配置获得值
iii. Suffix:因为CAS存在两种字符码,一种叫TGT,一种叫ST,在url地址栏中常出现都以 TGT或者ST开头就是这里需要设置的。
1. 票据具体是如何创建,维护的呢?
a) 如何创建的呢?使用了UniqueTiketIdGenerator接口,实现该接口的有两种
i. DefaultUniqueTiketIdGenerator
1. 获得随机字符串
2. 获得随机字符与PRINTABLE_CHARACTERS 对应的值,填充到新的char数组中,最后返回该char数组的String形式。
ii. SamlCompliantUniqueTiketIdGenerator
1. 获得随机字符
2. 使用SAMLArtifactType0002 将 设置的sourceLocation 与随机字符加密
c) 使用spring trigger 定时处理cache票据(也是在spring中配置)
注释:TicketRegistry在下方有UML图,其中就存在一个叫做deleteTicket(String ticketID)的方法.
2. authentication表示授权对象
Authentication如何生成?
从uml中可知,Authencation主要保存着一个Principal,这个Authencation创建的时间,以及其他的一些属性。那如果生成TGT就还必须获得Principal。
如果要想获得Principal那么需要Credentials进行转换
这是Principal包含的值。
这样就可以获得一个Authencation。
3. policy表示一个检验TGT正确性的验证单。
Policy如何生成?
这里主要是通过票据状态(TicketState)的使用次数与存活的时间来判断
这里主要将TGT如何创建,当TGT创建成功后,系统需要做哪些工作呢?下一节继续。