在CAS中很多地方使用了策略模式,那么根据什么方式来确定使用哪种策略呢?在很多策略类中有一个support(Credentials c)的方法,所以可以看出是根据Credentails的类型来决定使用哪种策略的。所以我们在AuthenticationHandler,CredentialsToPrincipalResolver,CredentialsBinder这些都可以看到support(Credentials c)方法。
下面是公用API列表,我们来一个个介绍这些接口的作用。
-
org.jasig.cas.CentralAuthenticationService:CAS核心,提供给HTTP,Web HTML, Web Services, RMI或者其他请求使用。能够创建,存储,验证和验证票据信息。
具有几个方法:
1)String createTicketGrantingTicket(Credentials credentials)
throws TicketException:根据凭证对象来创建一个TGT票据,那么凭证怎么来的呢?就是页面输入的信息,现在知道为啥TGT是和用户相关的凭证了吧。2) String grantServiceTicket(String ticketGrantingTicketId, Service service)
throws TicketException:更具TGT和service来创建ST,从前面我们知道service就是接入的应用系统,那么ST就是用户(TGT)访问的service的票据。3)String grantServiceTicket(final String ticketGrantingTicketId,final Service service, final Credentials credentials)
throws TicketException:这个是干嘛的呢?根据TGT和service来创建ST,从前面我们知道service就是接入的应用系统,那么ST就是用户(TGT)访问的service的票据。同时会给服务提供验证的credentials.
4)Assertion validateServiceTicket(final String serviceTicketId, final Service service) throws TicketException:很容易理解是不是,就是验证ST的,那么怎么返回一个Assertion对象,在前面介绍客户端配置票据验证的时候,是不是验证通过后会有一个xml格式的数据?就是个那个地方使用的。
5) void destroyTicketGrantingTicket(final String ticketGrantingTicketId):票据不会一直创建下去,用户也不是一直在线,总需要退出,就算不退出也有一个时间限制吧,这个就是给登出或者超时后销毁和用户相关的TGT票据使用的。
6)String delegateTicketGrantingTicket(final String serviceTicketId, final Credentials credentials) throws TicketException:文档说是给代理使用的org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler
- org.jasig.cas.authentication.handler.AuthenticationHandler::这个很好理解,就是实际验证的,只有两个方法:boolean authenticate(Credentials credentials)和 boolean supports(Credentials credentials)后面这个是不是很熟悉啊,对了,就是前面提到的策略模式中的supports方法,怎么认证方法只会返回true和false啊,那么用户信息怎么取得呢?后面有个CredentialsToPrincipalResolver接口专门来做这个事情。
- org.jasig.cas.authentication.handler.PasswordEncoder:密码转换器
- org.jasig.cas.authentication.principal.Credentials:取得客户输入的数据,或者可以理解为用户认证的凭据。就是需要认证用户身份需要的数据,每种认证方式需要信息是不一样的。这个只是一个类型接口,就是没有任何方法的接口。
- org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver:上面我们说到,Credentials对象是从界面或者别的什么地方取得用户信息,那么用户信息通过认证后怎么转换为Principal对象呢,这个就是这个解析器的作用了,由于认证本身是没有返回用户信息的,只是确定人中通过还是没有通过,所以取得用户信息需要另外一个非常重要的接口PersonAttributeDao,这个接口其实并不在CAS核心接口中的,是在一个叫person-directory-api-1.5.0-RC6.jar中的,这个包里面只有两个类,两个接口,那么实现有那些呢?是在person-directory-impl-1.5.0-RC6.jar,这个里面内容很丰富的。基本上你能想到的所有能取得用户信息的地方都有实现了。这个接口,也是一个策略,只有两个方法:supports , Principal resolvePrincipal(Credentials credentials),后面这个接口是不是很一目了然了?你可以理解我解析,或者更贴切点叫转换。
- org.jasig.cas.authentication.principal.Principal:这个主要是保存认证后的用户信息。扩展信息放在一个Map中的。
- org.jasig.cas.authentication.principal.Service:这个接口定义了和客户端相关的方法,例如登出服务器logOutOfService等动作。logOutOfService就是单点登出时候,怎么在服务器端登出所有访问过的客户端啦。
- org.jasig.cas.authentication.principal.UsernamePasswordCredentials:用户用户名和密码访问的Credentials实现。
- org.jasig.cas.authentication.Authentication:认证对象,就是一次认证后的结果对象,那么为啥不使用Principal对象来作为认证结果呢?第一不是每次认证都是合法用户,对于不合法用户怎么办呢?其次,认证是一个动作,和这个动作本身相关的信息显然和用户信息是没有关系,例如认证时间。这个接口将Principal对象做了一次包装。也就是说可以通过Authentication接口可以访问到Principal对象。
- org.jasig.cas.authentication.AuthenticationManager
- org.jasig.cas.authentication.AuthenticationMetaDataPopulator
- org.jasig.cas.ticket.proxy.ProxyHandler
- org.jasig.cas.ticket.registry.TicketRegistry
- org.jasig.cas.ticket.registry.RegistryCleaner
- org.jasig.cas.ticket.registry.AbstractTicketRegistry
- org.jasig.cas.ticket.ExpirationPolicy
- org.jasig.cas.util.UniqueTicketIdGenerator
- org.jasig.cas.validation.ValidationSpecification
- org.jasig.cas.validation.Assertion:这个接口主要是定义了,验证服务返回的对象,就是一个断言,你这个ST有没有权限访问,以及TGT访问的ST认证对象。
- org.jasig.cas.web.bind.CredentialsBinder:这个是一个绑定器,将用户输入的信息或者从IE或者别的地方得到信息绑定到对应的凭证中去。使用spring web flew后,没有被使用了。
原文链接:http://www.cnblogs.com/jiuzhongguo/archive/2012/04/25/2469685.html
相关推荐
CAS(Central Authentication Service)是Java开发的一个开源的单点登录...通过学习和实践,你可以掌握CAS的核心概念,实现自定义认证策略,以及优化客户端集成,从而为你的项目构建一个强大而安全的单点登录系统。
《CAS Protocol》文档是关于CAS协议的核心内容,它详细阐述了CAS的工作原理和交互流程。CAS协议基于HTTP协议,主要有两个核心部分:验证请求(Validation Request)和验证响应(Validation Response)。在用户尝试...
1. **CAS服务器初始化**:CAS服务器是核心组件,负责用户的身份验证。在部署时,将`cas-server-3.5.2`解压缩并将其内容放在Tomcat服务器的`webapps`目录下,这会启动CAS服务。 2. **自定义登录页面**:默认情况下,...
在"CAS实现单点登录(SSO)经典完整教程.docx"文档中,你可能会学到以下内容: 1. **安装和配置CAS服务器**:包括下载CAS服务器的源码或二进制包,配置服务器的属性文件,如数据库连接、主题设置等。 2. **CAS客户端...
标题中的“cas”通常指的是中央...如果你对CAS的源码分析、工具集成或凭证管理有深入的兴趣,这篇博客会是一个很好的学习资源。由于原始内容未提供,具体的细节和示例无法给出,但上述内容提供了可能涵盖的话题范围。
CAS单点登录的核心工作流程如下: 1. **用户访问受保护的应用**:用户尝试访问第一个受CAS保护的Web应用时,会被重定向到CAS服务器的登录页面。 2. **CAS服务器的重定向**:如果用户尚未登录,CAS服务器会显示登录...
在单点登录(Single Sign-On,SSO)系统中,CAS扮演着核心角色,它提供了统一的身份验证服务,使得用户只需要登录一次就可以访问所有相互信任的应用系统。在实际应用中,为了满足企业或组织的个性化需求,往往需要对...
【描述】中的"cas的例子,经过改造后,可以运行调试"意味着这是一个实际的CAS项目实例,可能包含了服务器端和客户端的配置,开发者已经调整了代码以适应特定的环境或者功能需求,并且可以用于学习和测试目的。学习这...
总之,`cas-4.0.0.zip`是一个丰富的学习资源,不仅适用于想要实现SSO的开发者,也适合对Web安全和身份验证机制感兴趣的任何人。通过深入研究这个压缩包,你可以提升自己的Java Web开发技能,同时增强对网络安全的...
SpringBoot+Security+Cas是一个集成解决方案,用于构建安全的Web应用程序。这个Demo是为那些希望了解如何在Spring Boot应用中整合Spring Security和CAS(Central Authentication Service)服务的开发者准备的。下面...
总的来说,`cas-overlay-template-5.1.0源码及搭建手册`为CAS的使用者提供了便捷的起点,通过学习和实践,你可以创建一个符合自己需求的单点登录系统。这个过程涉及到的技术包括Java Web开发、Maven构建、Spring框架...
下面将详细讲解CAS的核心概念和关键组件,以及如何通过这两个子文件进行入门学习。 1. CAS服务器:这是整个认证服务的核心,它负责验证用户的凭证(如用户名和密码),并为通过验证的用户提供一个Ticket Granting ...
CAS的核心目标是简化用户认证流程,允许用户在一个系统上登录后,无需再次验证即可访问其他支持CAS的系统。它通过一个中央认证服务器来处理用户的登录请求,验证成功后,会向客户端(通常是浏览器)颁发一个票据...
首先,让我们理解一下CAS(Central Authentication Service)的核心概念。CAS是一个开放源码的SSO解决方案,由耶鲁大学开发,用于验证用户身份并提供单一登录服务。它的主要工作原理是:当用户尝试访问受保护的应用...
其核心流程包括:用户首次访问受保护资源时会被重定向到CAS服务器进行身份验证,成功后服务器返回一个票据(Ticket),客户端通过这个票据访问资源,资源服务器验证票据有效后允许访问。 2. Java实现:CAS服务器是...
这是CAS服务器端的核心组件,负责处理用户的认证请求和响应。3.5.1版本可能包含以下关键模块: 1. **Web应用程序**:基于Servlet的Web应用,运行在Tomcat、Jetty等Servlet容器上,提供HTTP接口处理SSO登录请求。 2....
标题 "cas 系统实例 服务端配置(一)" 提到的是 CAS(Central Authentication Service)系统的一个服务端配置教程。CAS 是一个开源的身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)。在本教程中,我们...
1. **源代码**:这部分包含了CAS服务的Java源代码,开发者可以通过阅读这些代码来了解CAS的工作流程,学习如何扩展或修改其功能。 2. **构建脚本**:可能包括Maven或Gradle等构建工具的配置文件,用于编译、测试和...
CAS-4.2.7是CAS项目的一个版本,此版本包含了SSO系统的源代码,便于开发者理解和定制。 SSO的核心概念包括: 1. **服务提供者(Service Provider)**:需要认证的Web应用或服务,它们依赖CAS服务器进行用户身份...
CAS的核心功能是实现用户在一个应用系统中登录后,无需再次认证即可访问其他已集成的系统。这种功能极大地提升了用户体验,同时也简化了安全管理。在Cas4.0.0版本中,主要包含以下几个方面的知识点: 1. **认证协议...