在构建现代企业级应用体系时,统一身份认证是保障系统安全与提升用户体验的关键一环,中央认证服务作为一种开源的单点登录协议,被广泛应用于各类场景,本文将详细阐述如何从零开始搭建一个基础的CAS服务器,帮助您快速构建企业级的SSO基础设施。

环境准备与核心概念
在着手搭建之前,确保您的开发环境已准备就绪,CAS服务器基于Java构建,因此以下组件是必不可少的:
- Java Development Kit (JDK): 建议使用JDK 11或更高版本。
- Apache Maven: 用于项目构建和依赖管理。
- 一个Web服务器: CAS可以以独立模式运行(内嵌Tomcat),也可以部署到外部的Tomcat、Jetty等Servlet容器中。
理解CAS的核心工作流至关重要,其核心思想是通过“票据”机制实现SSO,主要票据类型包括:
- TGT (Ticket Granting Ticket): 用户成功登录后,CAS服务器发放给用户的全局凭证,存储在服务器的Session中。
- ST (Service Ticket): 当用户访问一个已注册的客户端应用时,CAS服务器根据TGT生成的一次性票据,用于该应用验证用户身份。
CAS服务器搭建步骤
现代CAS项目的推荐搭建方式是使用WAR Overlay模板,这种方式允许我们在不修改CAS核心代码的前提下,通过覆盖或添加配置、依赖和视图文件来实现定制化。
第一步:获取并初始化项目
访问CAS官方GitHub仓库,使用提供的WAR Overlay模板来初始化您的项目,您可以直接下载或使用git clone命令获取模板代码,这会为您生成一个标准的Maven项目结构。
第二步:配置核心属性
项目的主配置文件位于src/main/resources/etc/cas/config/目录下,您可以创建一个名为cas.properties的文件(或使用YAML格式)来进行核心配置,以下是一些最基本的配置项:
| 配置项 | 描述 | 示例值 |
|---|---|---|
server.name |
CAS服务器的访问前缀,客户端将重定向到此地址。 | https://cas.example.org:8443 |
server.prefix |
CAS服务器的完整URL前缀。 | ${server.name}/cas |
cas.authn.accept.users |
静态用户认证配置,格式为username::password,适用于快速测试。 |
casuser::Mellon |
在生产环境中,强烈建议使用HTTPS协议,并配置有效的SSL证书。

第三步:构建与运行 在项目根目录下,执行Maven命令来构建项目:
mvn clean package
构建成功后,会在target目录下生成一个可执行的WAR文件(如cas.war),您可以通过内置的Tomcat运行它:
java -jar target/cas.war
服务器启动后,在浏览器中访问https://localhost:8443/cas,如果看到CAS的默认登录页面,说明服务器已成功运行。
服务注册与客户端集成
一个孤立的CAS服务器没有意义,必须注册需要其提供认证服务的客户端应用,CAS通过JSON文件来管理服务注册,在src/main/resources/etc/cas/services目录下,创建一个JSON文件,例如HTTP-10000001.json如下:
{
"@class": "org.apereo.cas.services.RegexRegisteredService",
"serviceId": "^(https|http)://.*",
"name": "HTTP and HTTPS",
"id": 10000001,
"evaluationOrder": 1
}
这个配置表示CAS服务器允许所有以http://或https://开头的URL作为客户端服务进行注册,在实际应用中,您应该将serviceId设置得更为精确,以提高安全性。
客户端应用(如一个Spring Boot项目)需要集成CAS Client库,并配置其指向CAS服务器的地址,这样就能完成整个SSO流程的闭环。

小编总结与后续扩展
至此,一个功能完备的基础CAS服务器已经搭建完成,您可以使用casuser和Mellon这个测试账户进行登录体验,但这仅仅是开始,一个企业级的CAS系统通常还需要更复杂的功能,后续的扩展方向包括:
- 数据库认证: 将静态用户替换为存储在MySQL、PostgreSQL等数据库中的用户信息。
- LDAP集成: 连接到企业现有的Active Directory或OpenLDAP进行统一认证。
- 多因素认证 (MFA): 增加短信、邮箱或Google Authenticator等验证方式。
- OAuth2/OpenID Connect支持: 使CAS服务器不仅能做SSO,还能作为身份提供商(IdP)为现代应用提供认证服务。
相关问答FAQs
Q1: CAS服务器启动后,访问登录页面提示“无法验证您是否为真人”或类似错误是什么原因? A1: 这个错误通常与CAS服务器的URL配置有关,请检查以下几点:
- 配置一致性: 确保
cas.properties或application.yml中的server.name和server.prefix与您在浏览器中访问的URL完全一致,包括协议(http/https)、域名和端口。 - 客户端服务注册: 确保您访问的客户端应用的URL已经在CAS的服务注册文件中被正确配置,并且正则表达式能够匹配上。
- HTTPS问题: 如果您在HTTP环境下运行,但某些安全策略或模块强制要求HTTPS,也可能导致此问题,请确保环境配置与您的访问协议相匹配,在生产环境中,始终使用HTTPS。
Q2: 如何将CAS默认的静态用户认证改为数据库认证? A2: 要切换到数据库认证,主要分两步:
- 添加依赖: 在项目的
pom.xml文件中,添加CAS的JDBC支持模块以及您所使用的数据库驱动,对于MySQL,需要添加cas-server-support-jdbc和mysql-connector-java。 - 修改配置: 在配置文件(如
cas.properties)中,注释掉cas.authn.accept.users,然后添加数据库连接和查询相关的配置,关键配置项包括数据库URL、用户名、密码、以及用于查询用户和密码的SQL语句。cas.authn.jdbc.query[0].sql=SELECT password FROM users WHERE username=?,配置完成后,重新构建并启动服务器即可。