您当前的位置:首页 > 互联网教程

cas认证是什么认证

发布时间:2025-05-23 10:14:10    发布人:远客网络

cas认证是什么认证

一、cas认证是什么认证

CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。

CAS是Yale大学发起的一个开源项目,旨在为 Web应用系统提供一种可靠的单点登录方法,CAS在 2004年 12月正式成为 JA-SIG的一个项目。

1、开源的企业级单点登录解决方案。

2、CAS Server为需要独立部署的 Web应用。

3、CAS Client支持非常多的客户端(这里指单点登录系统中的各个 Web应用),包括 Java,.Net, PHP, Perl, Apache, uPortal, Ruby等。

从结构上看,CAS包含两个部分: CAS Server和 CAS Client。CAS Server需要独立部署,主要负责对用户的认证工作;

CAS Client负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图是 CAS最基本的协议过程:

CAS Client与受保护的客户端应用部署在一起,以 Filter方式保护受保护的资源。对于访问受保护资源的每个 Web请求,CAS Client会分析该请求的 Http请求中是否包含 Service Ticket,

如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server登录地址,并传递 Service(也就是要访问的目的资源地址),以便登录成功过后转回该地址。

用户在第 3步中输入认证信息,如果登录成功,CAS Server随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,

之后系统自动重定向到 Service所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),

CAS Client在拿到 Service和新产生的 Ticket过后,在第 5,6步中与 CAS Server进行身份核实,以确保 Service Ticket的合法性。

在该协议中,所有与 CAS的交互均采用 SSL协议,确保,ST和 TGC的安全性。协议工作过程中会有 2次重定向的过程,但是 CAS Client与 CAS Server之间进行 Ticket验证的过程对于用户是透明的。

另外,CAS协议中还提供了 Proxy(代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS官方网站上的相关文档。

使用 CAS在 Tomcat中实现单点登录中部署客户端应用

单点登录的目的是为了让多个相关联的应用使用相同的登录过程,本文在讲解过程中构造 2个简单的应用,分别以 casTest1和 casTest2来作为示例,它们均只有一个页面,显示欢迎信息和当前登录用户名。

这 2个应用使用同一套登录信息,并且只有登录过的用户才能访问,通过本文的配置,实现单点登录,即只需登录一次就可以访问这两个应用。

假设 CAS Server单独部署在一台机器 A,而客户端应用部署在机器 B上,由于客户端应用与 CAS Server的通信采用 SSL,因此,需要在 A与 B的 JRE之间建立信任关系。

首先与 A机器一样,要生成 B机器上的证书,配置 Tomcat的 SSL协议。

其次,下载的 InstallCert.java,运行“ java InstallCert compA:8443”命令,

并且在接下来出现的询问中输入 1。

这样,就将 A添加到了 B的 trust store中。如果多个客户端应用分别部署在不同机器上,那么每个机器都需要与 CAS Server所在机器建立信任关系。

准备好应用 casTest1和 casTest2过后,分别部署在 B和 C机器上,由于 casTest1和casTest2,B和 C完全等同,我们以 casTest1在 B机器上的配置做介绍,

假设 A和 B的域名分别为 domainA和 domainB。

将 cas-client-java-2.1.1.zip改名为 cas-client-java-2.1.1.jar并拷贝到 casTest1/WEB-INF/lib目录下,修改 web.xml文件,添加 CAS Filter,如清单 10所示:

<filter-name>CAS Filter</filter-name>

<param-value>;

<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>

<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>

<filter-name>CAS Filter</filter-name>

对于所有访问满足 casTest1/protected-pattern/路径的资源时,都要求到 CAS Server登录,如果需要整个 casTest1均受保护,可以将 url-pattern指定为“/*”。

从清单 10可以看到,我们可以为 CASFilter指定一些参数,并且有些是必须的,表格 1和表格 2中分别是必需和可选的参数:

CAS在登录成功过后,会给浏览器回传 Cookie,设置新的到的 Service Ticket。但客户端应用拥有各自的 Session,我们要怎么在各个应用中获取当前登录用户的用户名呢?

CAS Client的 Filter已经做好了处理,在登录成功后,就可以直接从 Session的属性中获取,如清单 11所示:

清单 11.在 Java中通过 Session获取登录用户名

2session.getAttribute(CASFilter.CAS_FILTER_USER);

3session.getAttribute("edu.yale.its.tp.cas.client.filter.user");

在 JSTL中获取用户名的方法如清单 12所示:

清单 12.通过 JSTL获取登录用户名

1<c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>

另外,CAS提供了一个 CASFilterRequestWrapper类,该类继承自HttpServletRequestWrapper,主要是重写了 getRemoteUser()方法,

只要在前面配置 CASFilter的时候为其设置“ edu.yale.its.tp.cas.client.filter.wrapRequest”参数为 true,就可以通过 getRemoteUser()方法来获取登录用户名,具体方法如清单 13所示:

清单 13.通过 CASFilterRequestWrapper获取登录用户名

2 out.println("The logon user:"+ reqWrapper.getRemoteUser());

参考资料来源:IBM中国-使用 CAS在 Tomcat中实现单点登录

二、什么是CAS、什么是AQS

1、在探讨多线程编程时,CAS(Compare And Swap)和 AQS(AbstractQueuedSynchronizer)是核心概念,它们在构建同步机制和实现锁方面扮演重要角色。下面我们将深入理解CAS和AQS的原理、应用场景及其在Java中的实现。

2、CAS是一种乐观锁策略,基于原子操作的乐观锁机制。它假设多个线程同时操作同一数据时,只有一个线程能成功修改数据。当多个线程尝试更新同一变量时,只有一个线程能成功地完成CAS操作,其余线程将失败并重新尝试。这种非阻塞算法提高了性能,因为它避免了锁带来的线程阻塞。

3、在Java的java.util.concurrent.atomic包中,提供了原子类以实现原子操作,如原子整数类AtomicInteger等。这些类在多线程环境下的操作具有排他性,允许线程在不被中断的情况下执行操作,从而提高了程序的并发性能。

4、CAS操作可能会引发ABA问题,即在数据变化前后的两次CAS操作中,数据值相同,从而无法判断数据是否被修改过。为解决此问题,乐观锁通常使用版本号机制,每次修改数据时记录版本号,并在修改后递增。若后续修改请求与当前版本号一致,则允许进行修改,否则视为无效修改。

5、使用版本号机制可以确保ABA问题的解决,避免了数据在两个时间点上的“自循环”修改,从而保证了数据的一致性和完整性。

6、AQS是Java并发库中的抽象基类,用于构建锁和其他同步组件的基础框架。它提供了一套同步状态的获取和释放方法,通过继承或组合方式实现具体的同步逻辑。AQS维护一个volatile int state变量和一个FIFO(双向队列)等待队列,用于管理同步状态和等待线程。

7、AQS提供了多种同步状态的访问方式,如公平锁和非公平锁,以及条件变量等。ReentrantLock、Semaphore、CountDownLatch等Java并发工具类都基于AQS实现,提供了丰富的同步控制功能。

8、在获取和释放同步状态的过程中,AQS通过内部实现的队列和状态变量,保证了多线程环境下的线程安全性和高效的同步操作。例如,获取锁时,AQS会尝试通过CAS操作修改状态变量,并在失败时将线程加入等待队列;释放锁时,则会通过CAS操作调整状态变量,同时唤醒等待队列中的线程。

9、通过深入理解CAS和AQS的工作原理及其在Java中的具体实现,开发者可以更有效地利用Java并发工具,构建高效、可靠的多线程应用程序。

三、cas认证是什么意思

CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。

CAS是 Yale大学发起的一个开源项目,旨在为 Web应用系统提供一种可靠的单点登录方法,CAS在 2004年 12月正式成为 JA-SIG的一个项目。

开源的企业级单点登录解决方案。

CAS Server为需要独立部署的 Web应用。

CAS Client支持非常多的客户端(这里指单点登录系统中的各个 Web应用),包括 Java,.Net, PHP, Perl, Apache, uPortal, Ruby等语言编写的各种web应用。

CAS属于Apache 2.0许可证,允许代码修改,再发布(作为开源或商业软件)。

从结构上看,CAS包含两个部分: CAS Server和 CAS Client。CAS Server需要独立部署,主要负责对用户的认证工作;CAS Client负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。