好的,部署和测试 Apereo CAS 的本地开发(dev)环境是一个非常常见的需求。下面我将为你提供一个详细的、分步骤的指南,涵盖从准备、运行到测试的完整流程。
核心概念:CAS Overlay 项目
Apereo CAS 官方推荐使用 Overlay方式来构建和部署。Overlay 机制允许你从一个官方的、预编译的基础 WAR 文件开始,然后通过添加你自己的配置文件(如属性文件、UI 主题、服务注册配置等)来覆盖默认设置,从而定制你的 CAS 服务器。这种方式简化了依赖管理和升级过程。
第一步:环境准备
-
Java Development Kit (JDK):
-
确认已安装 JDK 8, 11, 17 或 21(推荐使用 JDK 11 或 17,这是目前的主流和支持版本)。
-
在终端运行
java -version进行验证。
-
-
构建工具:
- Gradle 或 Maven。Overlay 项目同时支持两者,当前官方文档和模板更偏向于 Gradle。本指南以 Gradle 为例。
-
Git:
- 用于从 GitHub 克隆 Overlay 模板项目。
-
IDE(可选但推荐):
- IntelliJ IDEA, Eclipse, VS Code 等。这能极大地提升开发和调试效率。
第二步:获取并配置 Overlay 项目
-
克隆 Overlay 模板:
打开终端,到一个你希望存放代码的目录,执行以下命令:
git clone https://github.com/apereo/cas-overlay-template.git cas-dev-server cd cas-dev-server这里我们克隆了模板,并创建了一个名为
cas-dev-server的文件夹。 -
切换到稳定版本分支(重要):
master分支可能包含不稳定的新特性。建议切换到一个稳定版本的分支,例如 CAS 7.0.x。git branch -a | grep 7.0 # 查看可用的 7.0.x 分支 git checkout 7.0.x # 切换到 7.0.x 分支 -
关键配置文件:
src/main/resources/application.yml这是 CAS 最主要的配置文件。对于开发环境,我们需要配置一个简单的、基于静态列表的认证方式(比如固定用户名/密码),并启用 HTTPS。
-
如果
src/main/resources目录下没有application.yml,你可以从src/main/resources/application.properties复制一份并重命名,或者直接创建一个新的。 -
使用以下基础配置内容:
server:
port: 8443
ssl:
enabled: true
key-store: file:/path/to/your/keystore/thekeystore
key-store-password: changeitcas:
authn:
accept:
enabled: true
users: "casuser::Mellon" # 定义用户: 用户名::密码
# 如果你想用 LDAP(如 Apache DS)进行测试,可以在这里配置
# ldap: ...# 服务注册:配置哪些应用(服务)可以使用 CAS 进行认证 service-registry: core: init-from-json: true json: location: file:/path/to/your/cas-dev-server/src/main/resources/serviceslogging:
level:
org:
apereo: DEBUG # 开启 DEBUG 日志,便于排查问题
注意:你需要生成一个用于 HTTPS 的 SSL 证书(keystore)。
-
在项目根目录下运行:
keytool -genkey -keyalg RSA -alias cas -keystore thekeystore -storepass changeit -keypass changeit -validity 360 -keysize 2048 -
将上面配置中的
/path/to/your/keystore替换为这个thekeystore文件的实际路径(例如:/home/yourname/cas-dev-server/thekeystore)。
-
-
注册服务:
为了让 CAS 保护你的应用,你需要先注册这个应用(服务)。创建一个 JSON 文件:
src/main/resources/services/MyApp-10000001.json。{ "@class": "org.apereo.cas.services.RegexRegisteredService", "serviceId": "https://localhost:9000/.*", # 你的应用(客户端)的 URL 模式 "name": "MyLocalApp", "id": 10000001, "evaluationOrder": 1, "logoutType": "BACK_CHANNEL" }
第三步:构建并运行 CAS 服务器
在项目根目录(cas-dev-server)下,执行以下命令:
./gradlew run
# 或者在 Windows 上使用: gradlew.bat run
这个命令会:
-
下载所有必要的依赖。
-
构建 CAS WAR 文件。
-
启动一个内嵌的容器(默认是 Apache Tomcat)。
-
将 CAS 应用部署到容器中。
第一次运行会花费一些时间下载依赖。完成后,你会在日志中看到类似 Started CasWebApplication in X.XXX seconds (JVM running for X.XXX)的信息,表示启动成功。
第四步:测试你的 CAS Dev 环境
现在你的 CAS 服务器已经在 https://localhost:8443/cas上运行。
-
访问登录页面:
-
打开浏览器,访问
https://localhost:8443/cas/login。 -
由于使用了自签名证书,浏览器会显示"不安全"警告。这是正常的。在开发环境中,你需要点击"高级"->"继续前往localhost(不安全)"以跳过警告。
-
-
进行认证:
-
在登录页面,使用你在
application.yml中配置的用户名和密码:casuser/Mellon。 -
登录成功后,你会被重定向到 CAS 的标准欢迎页面,并显示一条成功的消息以及你的用户名。
-
-
测试单点登出(SLO):
- 在欢迎页面上,通常会有一个"Logout"链接。点击它,你会被登出并返回到登录页面。
-
查看日志:
- 密切关注你启动 CAS 的那个终端窗口的输出。因为日志级别是
DEBUG,你会看到非常详细的流程信息,这对于理解和调试 CAS 的行为至关重要。
- 密切关注你启动 CAS 的那个终端窗口的输出。因为日志级别是
第五步:与 CAS 客户端集成测试(进阶)
一个完整的 SSO 流程需要服务提供者(SP,即你的应用)。你可以部署一个简单的 CAS 客户端来进行测试。
-
选择一个客户端:
-
CAS 示例 PHP 客户端:这是一个非常简单的用于测试的 PHP 应用。
-
CASified Spring Boot 应用 :如果你熟悉 Java/Spring,可以创建一个简单的 Spring Boot 应用并集成
pac4j或spring-security-cas。 -
官方 CAS 演示客户端:Apereo 也提供了一些演示客户端。
-
-
配置客户端:
- 在客户端的配置中,将 CAS 服务器的地址指向你的 dev 环境:
https://localhost:8443/cas。
- 在客户端的配置中,将 CAS 服务器的地址指向你的 dev 环境:
-
测试流程:
-
访问你的客户端应用(例如:
http://localhost:9000)。 -
客户端会检测到你未登录,并将你重定向到
https://localhost:8443/cas/login。 -
在 CAS 登录页输入凭证。
-
登录成功后,CAS 会将你重定向回客户端应用,并附带一个 Service Ticket(ST)。
-
客户端应用验证 ST 后,认为你已通过认证,显示受保护的内容。
-
总结与要点
-
Overlay 是标准方式:始终使用 Overlay 项目来开始你的 CAS 之旅。
-
HTTPS 是必须的:CAS 强制使用 HTTPS,开发环境需要用自签名证书。
-
application.yml是核心:所有配置都在这里。 -
服务必须注册 :任何想使用 CAS 的应用都必须在
services/目录下有对应的 JSON 注册文件。 -
./gradlew run是开发神器:这个命令集构建、部署、运行于一体,非常适合开发和测试。 -
日志是你的好朋友:遇到问题时,第一件事就是查看 DEBUG 日志。
按照这个流程,你应该可以顺利地在本地搭建并测试一个功能完整的 Apereo CAS 开发环境。