一、CAS单点登录概述
CAS (Central Authentication Service) 单点登录是一种开源的企业级单点登录系统。它通过提供可重用的身份认证服务,使之成为一种简单而有效的 Web 单点登录解决方案。
CAS 单点登录主要由两个部分组成:CAS服务器和CAS客户端。CAS服务器是用于提供身份认证服务的单独服务。而CAS客户端则是需要接入CAS服务器进行身份认证的应用系统。
二、CAS单点登录原理
CAS单点登录的核心原理是代理允许,CAS认证中心负责生成 TGT (Ticket Granting Ticket) 和 ST (Service Ticket) 以及校验 TGT 和 ST 的有效性。CAS客户端调用CAS服务的统一登录界面,将用户登录信息提交给 CAS认证中心进行身份认证,认证通过后,CAS认证中心会生成一个 TGT 并将其返回给 CAS客户端。当用户访问其他客户端应用系统时,如果没有经过身份验证,则此时客户端应用会将请求转发到 CAS 认证中心,由 CAS 认证中心根据 ST 的有效性向客户端应用系统返回用户的信息。
CAS认证中心会在用户初次认证通过后,记录 ST 的有效期,每次 CAS客户端向 CAS认证中心校验 ST 时,CAS认证中心都会判断 ST 是否过期或已被使用过,如果 ST 有效,就返回给 CAS客户端 ST 中包含的用户身份信息。
三、CAS单点登录的实现
1、部署CAS服务器
部署CAS服务器需要有一定的 Java 编程和服务器管理经验。首先需下载CAS服务器的压缩包并解压,配置部署文件,主要有以下几个文件:
- deployerConfigContext.xml
- log4j2.xml
- ticketExpirationPolicies.xml
- web.xml
其中,deployerConfigContext.xml 为主要配置文件,用以配置 CAS 服务端的具体实现。ticketExpirationPolicies.xml 用以配置 CAS 服务端票据的过期时间。
2、集成CAS客户端
CAS客户端是需要接入CAS服务器进行身份验证的应用系统。CAS客户端可以是 Java 应用、PHP 应用或其他类型的应用系统。
集成CAS客户端需要对CAS客户端进行配置。CAS客户端主要配置以下信息:
- cas.server.url.prefix:CAS服务器所在地址前缀
- cas.server.login_url:CAS服务器登录地址
- cas.server.logout_url:CAS服务器注销地址
- cas.client.service_url:CAS客户端应用系统地址(需要向CAS服务器进行注册)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/DTD/spring-beans.dtd"> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <!--配置CAS客户端--> <bean id="casClient" class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"> <constructor-arg value="https://cas.server.com" /> </bean> <bean id="casAuthenticationEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint"> <property name="loginUrl" value="https://cas.server.com/login" /> <property name="serviceProperties" ref="casProperties" /> </bean> <bean id="casProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="casServerUrlPrefix">https://cas.server.com</prop> <prop key="casServerLoginUrl">https://cas.server.com/login</prop> <prop key="casServerLogoutUrl">https://cas.server.com/logout</prop> <prop key="casClientServiceUrl">https://client.server.com/service</prop> </props> </property> </bean> </beans>
四、CAS单点登录的应用场景
1、统一身份认证
CAS单点登录可以用于实现企业内部各个应用系统的身份认证,用户登录不同的应用系统无需再次输入用户名和密码,提高了操作效率。
2、集中控制系统权限
CAS单点登录可以进行权限控制,通过配置授权策略实现对特定用户和角色等访问权限的控制。
3、实现单点注销
CAS单点登录可以实现单点注销,当用户在一个客户端应用注销登录时,会自动触发其他已经登录的应用进行注销。
4、简化开发和维护
使用CAS单点登录可以实现代码的复用,不同应用系统只需要进行简单的配置就可以实现单点登录的功能,减少了开发和维护的工作量。