Yale University CAS Server debug 1

来源:互联网 发布:sql 三个单引号 编辑:程序博客网 时间:2024/06/04 20:08

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 ServerTGT,已经来访者信息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也就是封装了usernamepassword的凭证。这个凭证在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创建成功后,系统需要做哪些工作呢?下一节继续。