CAS单点登录系统集成指南:从原理到Spring Boot与Vue实践

CAS单点登录系统集成指南:从原理到Spring Boot与Vue实践

1. CAS简介与实现原理

1.1 开发方与背景

CAS(Central Authentication Service)是由耶鲁大学开发的企业级单点登录解决方案,现由Apereo基金会维护。作为开源项目,它已成为业界最流行的SSO实现之一。

1.2 核心原理

CAS基于Ticket机制实现SSO,主要流程如下:

sequenceDiagram
    participant User
    participant ClientApp
    participant CAS Server
    participant Service
    
    User->>ClientApp: 访问受保护资源
    ClientApp->>User: 重定向到CAS登录页
    User->>CAS Server: 提交认证信息
    CAS Server->>User: 颁发TGT(设置Cookie)和ST
    User->>ClientApp: 携带ST访问
    ClientApp->>CAS Server: 验证ST有效性
    CAS Server->>ClientApp: 返回用户身份
    ClientApp->>User: 授予访问权限

1.3 核心代码示例

CAS服务端配置示例(application.properties):

# CAS服务端配置
cas.server.name=https://cas.example.org
cas.server.prefix=${cas.server.name}/cas

# 认证处理器配置
cas.authn.accept.users=user::password

# Ticket配置
cas.ticket.tgt.rememberMe.enabled=true
cas.ticket.st.numberOfUses=1
cas.ticket.st.timeToKillInSeconds=30

2. Spring Boot集成CAS

2.1 添加依赖

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-cas</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.2 安全配置

@Configuration
@EnableWebSecurity
public class CasSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Value("${cas.server.url}")
    private String casServerUrl;
    
    @Value("${cas.service.url}")
    private String serviceUrl;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/public/**").permitAll()
                .anyRequest().authenticated()
            .and()
            .csrf().disable()
            .logout().logoutSuccessUrl(casServerUrl + "/logout")
            .and()
            .exceptionHandling().authenticationEntryPoint(casAuthenticationEntryPoint())
            .and()
            .addFilter(casAuthenticationFilter())
            .addFilterBefore(casLogoutFilter(), LogoutFilter.class)
            .addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class);
    }
    
    // 其他必要的Bean配置...
}

2.3 用户信息处理

@Service
public class CasUserDetailsService implements UserDetailsService {
    
    @Override
    public UserDetails loadUserByUsername(String username) {
        // 从CAS返回的属性中获取用户信息
        return new User(username, "", 
            AuthorityUtils.createAuthorityList("ROLE_USER"));
    }
}

3. Vue集成CAS

3.1 Vue2集成方案

安装依赖
npm install vue-cas --save
全局配置
import Vue from 'vue';
import VueCas from 'vue-cas';

Vue.use(VueCas, {
  casUrl: 'https://cas.example.org',
  serviceUrl: 'http://your-frontend-app.com'
});
登录控制
// 在路由守卫中检查认证
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!Vue.prototype.$cas.isAuthenticated()) {
      Vue.prototype.$cas.login();
    } else {
      next();
    }
  } else {
    next();
  }
});

3.2 Vue3集成方案

使用Composition API
import { createApp } from 'vue';
import { createCas } from 'vue-cas-next';

const cas = createCas({
  casUrl: 'https://cas.example.org',
  serviceUrl: 'http://your-vue3-app.com'
});

const app = createApp(App);
app.use(cas);
app.mount('#app');
自定义Hook
// useCas.ts
import { inject } from 'vue';

export default function useCas() {
  const cas = inject('cas');
  
  const login = () => {
    cas.login();
  };
  
  const logout = () => {
    cas.logout();
  };
  
  return { login, logout };
}

4. 常见问题与解决方案

  1. 跨域问题:确保CAS服务端配置了正确的CORS规则
  2. Session失效:合理设置Ticket过期时间
  3. 前后端分离架构:需要特殊处理REST API的认证
  4. 多系统集成:使用CAS的Service Registry管理多个服务

5. 总结

本文全面介绍了CAS单点登录系统的集成方案,从核心原理到具体实现,涵盖了Spring Boot后端和Vue前端的技术细节。通过合理的配置和代码实现,可以构建安全可靠的企业级单点登录系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值