基于CAS的单点登录实践之路

一、单点登录与CAS的背景价值

1.1 单点登录的迫切需求

在数字化转型背景下,企业往往部署多个业务系统(如OA、ERP、CRM等),用户需在不同系统中重复登录,导致体验割裂、管理成本上升。单点登录(SSO)通过统一认证入口,实现“一次登录、全网通行”,显著提升效率与安全性。据Gartner统计,实施SSO的企业用户平均登录时间减少60%,密码重置请求下降75%。

1.2 CAS的核心优势

CAS作为开源SSO协议,具备三大核心优势:

  • 协议标准化:支持CAS 1.0/2.0/3.0及SAML、OAuth2等扩展协议,兼容性广;
  • 轻量级部署:基于Java Servlet实现,可嵌入Tomcat/Jetty等容器,资源占用低;
  • 安全可控:采用Ticket机制(TGT/ST)隔离认证与授权,支持HTTPS、多因素认证。

二、CAS单点登录技术架构解析

2.1 CAS核心组件

CAS架构包含三部分:

  • CAS Server:认证中心,负责用户身份核验与Ticket发放;
  • CAS Client:集成在业务系统中的库(如Java、PHP、.NET),验证Ticket并建立会话;
  • Browser:用户代理,传递认证请求与响应。

CAS架构图
图1:CAS三端交互流程

2.2 认证流程详解

以CAS 3.0为例,典型流程如下:

  1. 用户访问业务系统:访问https://app.example.com,系统检测无会话后重定向至CAS Server;
  2. CAS Server认证:用户输入凭证,验证通过后生成TGT(Ticket Granting Ticket)并存储于Server,返回ST(Service Ticket)至客户端;
  3. 业务系统验证STapp.example.com通过后端调用验证ST有效性,建立本地会话;
  4. 单点登出:用户退出时,CAS Server销毁TGT并通知所有已登录系统清除会话。
  1. // CAS Client验证ST示例(Spring Security集成)
  2. @Configuration
  3. @EnableWebSecurity
  4. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  5. @Override
  6. protected void configure(HttpSecurity http) throws Exception {
  7. http.authorizeRequests()
  8. .antMatchers("/login**").permitAll()
  9. .anyRequest().authenticated()
  10. .and()
  11. .addFilter(casAuthenticationFilter())
  12. .addFilterBefore(casValidationFilter(), CasAuthenticationFilter.class);
  13. }
  14. private Filter casAuthenticationFilter() {
  15. CasAuthenticationFilter filter = new CasAuthenticationFilter();
  16. filter.setAuthenticationManager(authenticationManager());
  17. filter.setFilterProcessesUrl("/login/cas");
  18. return filter;
  19. }
  20. }

三、实践部署:从零搭建CAS SSO系统

3.1 环境准备

  • 硬件:建议2核4G以上服务器(生产环境需高可用集群);
  • 软件:JDK 1.8+、Tomcat 9.0+、MySQL 5.7+(存储用户数据);
  • 网络:开放80/443端口,配置DNS解析至CAS Server域名。

3.2 CAS Server部署

  1. 下载与配置

    • 从Apereo CAS官网下载cas-server-webapp
    • 修改application.properties

      1. # 数据库配置
      2. spring.datasource.url=jdbc:mysql://localhost:3306/cas?useSSL=false
      3. spring.datasource.username=cas_user
      4. spring.datasource.password=SecurePassword123!
      5. # HTTPS配置
      6. server.ssl.key-store=classpath:thekeystore.p12
      7. server.ssl.key-store-password=changeit
  2. 用户存储集成

    • JDBC认证:通过JdbcTicketRegistry连接MySQL,需创建users表(字段:username, password, email);
    • LDAP集成:适用于企业AD目录,配置ldap.url=ldap://ad.example.com:389
  3. 启动与测试

    • 打包为WAR部署至Tomcat,访问https://cas.example.com/login
    • 使用默认账号casuser/Mellon登录,验证TGT生成。

3.3 业务系统集成

以Spring Boot应用为例:

  1. 添加依赖

    1. <dependency>
    2. <groupId>org.jasig.cas.client</groupId>
    3. <artifactId>cas-client-core</artifactId>
    4. <version>3.6.4</version>
    5. </dependency>
  2. 配置web.xml

    1. <filter>
    2. <filter-name>CAS Authentication Filter</filter-name>
    3. <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    4. <init-param>
    5. <param-name>casServerLoginUrl</param-name>
    6. <param-value>https://cas.example.com/login</param-value>
    7. </init-param>
    8. <init-param>
    9. <param-name>serverName</param-name>
    10. <param-value>https://app.example.com</param-value>
    11. </init-param>
    12. </filter>
  3. 会话管理

    • 使用SingleSignOutFilter监听登出事件,清除本地Session。

四、安全加固与性能优化

4.1 安全防护措施

  • HTTPS强制:禁用HTTP,配置HSTS头;
  • CSRF防护:在CAS Client中启用Spring Security CSRF
  • Ticket加密:在application.properties中配置:
    1. cas.authn.ticketRegistry.crypto.encryption.key=AES128KeyHere
    2. cas.authn.ticketRegistry.crypto.signing.key=RSA2048KeyHere

4.2 高性能优化

  • 缓存Ticket:集成Redis替代默认内存存储,配置cas.ticket.registry.redis.host=localhost
  • 集群部署:多节点共享Ticket数据,通过Nginx负载均衡;
  • 异步验证:启用cas.authn.accept.async=true减少阻塞。

五、常见问题与解决方案

5.1 跨域问题

现象:业务系统与CAS Server域名不同,导致Cookie无法共享。
解决

  • 在CAS Server配置cas.server.name=https://cas.example.com
  • 业务系统设置sameSite=None; Secure属性。

5.2 证书配置错误

现象:访问CAS时提示“NET::ERR_CERT_AUTHORITY_INVALID”。
解决

  • 使用正规CA签发证书(如Let’s Encrypt);
  • 自签名证书需导入至JVM信任库:
    1. keytool -import -alias cas -file cas.crt -keystore $JAVA_HOME/lib/security/cacerts

六、总结与展望

基于CAS的单点登录系统通过标准化协议与灵活扩展性,成为企业级认证的首选方案。实践表明,合理配置CAS Server、集成安全存储、优化性能参数,可构建高可用、低延迟的SSO体系。未来,随着零信任架构的普及,CAS可进一步融合OAuth2、OIDC等协议,支持更细粒度的访问控制。

行动建议

  1. 优先在测试环境部署CAS,验证与现有系统的兼容性;
  2. 定期审计Ticket生命周期,防范会话固定攻击;
  3. 关注Apereo CAS GitHub获取最新版本与安全补丁。