RuoYi-Vue-fast单点登录实现:CAS与OAuth2.0集成方案
在企业级应用中,单点登录(Single Sign-On, SSO)已成为多系统整合的核心需求。用户无需重复输入凭证,即可无缝访问多个关联系统,大幅提升操作效率与安全性。本文基于RuoYi-Vue-fast框架,详解如何通过CAS(Central Authentication Service)与OAuth2.0协议实现SSO集成,解决多系统间身份认证的痛点。
框架认证体系基础
RuoYi-Vue-fast默认采用JWT(JSON Web Token)实现无状态认证,其核心实现位于src/main/java/com/ruoyi/framework/security/service/TokenService.java。该类通过createToken方法生成令牌,结合Redis存储用户会话信息,实现分布式环境下的身份验证。
安全配置类src/main/java/com/ruoyi/framework/config/SecurityConfig.java定义了认证流程,通过JwtAuthenticationTokenFilter拦截请求并验证令牌有效性。系统默认禁用Session,采用SessionCreationPolicy.STATELESS策略,为SSO集成提供无状态基础。
CAS集成方案
集成架构设计
CAS集成采用"认证中心-服务提供者"模式,用户通过CAS Server完成身份验证后,获得CAS票据(Ticket),再通过票据访问RuoYi-Vue-fast系统。架构如下:
核心实现步骤
-
添加CAS客户端依赖
在pom.xml中引入CAS客户端:<dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.6.4</version> </dependency> -
配置CAS过滤器链
创建CasConfig.java配置类,注册CAS认证过滤器:@Bean public FilterRegistrationBean<AuthenticationFilter> casAuthenticationFilter() { FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new AuthenticationFilter()); registration.addUrlPatterns("/*"); Map<String, String> initParams = new HashMap<>(); initParams.put("casServerLoginUrl", "https://cas.example.com/login"); initParams.put("serverName", "http://ruoyi.example.com"); registration.setInitParameters(initParams); return registration; } -
用户信息映射
修改src/main/java/com/ruoyi/project/system/controller/SysLoginController.java,添加CAS票据验证接口,将CAS返回的用户信息转换为系统登录用户:@GetMapping("/cas/login") public String casLogin(String ticket) { // 验证ticket并获取用户信息 String username = casService.validateTicket(ticket); // 生成JWT令牌 LoginUser loginUser = userService.selectUserByUserName(username); String token = tokenService.createToken(loginUser); return "redirect:/index?token=" + token; }
OAuth2.0集成方案
适用场景与流程
OAuth2.0适用于第三方应用授权场景(如微信登录、企业微信集成)。RuoYi-Vue-fast作为资源服务器,通过接入OAuth2.0认证服务器实现用户身份验证。授权码流程如下:
关键实现代码
-
配置OAuth2资源服务器
修改SecurityConfig.java,添加OAuth2资源服务器配置:@Override protected void configure(HttpSecurity http) throws Exception { http.oauth2ResourceServer() .jwt() .jwtAuthenticationConverter(jwtAuthenticationConverter()); } private Converter<Jwt, AbstractAuthenticationToken> jwtAuthenticationConverter() { JwtAuthenticationConverter converter = new JwtAuthenticationConverter(); converter.setJwtGrantedAuthoritiesConverter(jwt -> { List<String> roles = jwt.getClaimAsStringList("roles"); return roles.stream() .map(role -> new SimpleGrantedAuthority("ROLE_" + role)) .collect(Collectors.toList()); }); return converter; } -
实现OAuth2登录接口
在SysLoginController.java中添加OAuth2登录端点:@GetMapping("/oauth2/login") public AjaxResult oauth2Login(@RequestParam String code) { // 调用认证服务器换取token OAuth2Token token = oauth2Service.getToken(code); // 获取用户信息 OAuth2UserInfo userInfo = oauth2Service.getUserInfo(token.getAccessToken()); // 生成系统令牌 LoginUser loginUser = userService.selectUserByUserName(userInfo.getUsername()); String jwtToken = tokenService.createToken(loginUser); return AjaxResult.success().put("token", jwtToken); }
多协议整合与扩展
动态认证路由设计
为支持CAS与OAuth2.0并存,可通过请求参数动态选择认证方式。修改SecurityConfig.java,配置动态忽略URL:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/cas/login", "/oauth2/login");
}
会话管理增强
通过src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java提供的在线用户管理功能,可监控SSO登录用户状态,实现强制登出等操作。关键代码如下:
@DeleteMapping("/{tokenId}")
public AjaxResult forceLogout(@PathVariable String tokenId) {
redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
return AjaxResult.success();
}
部署与测试建议
环境配置要点
-
CAS Server部署
推荐使用CAS 6.x版本,配置HTTPS确保传输安全。修改cas.properties:server.ssl.key-store=file:/etc/cas/keystore.jks server.ssl.key-store-password=changeit -
OAuth2服务配置
确保授权服务器与RuoYi-Vue-fast的token.secret一致,避免签名验证失败。配置文件路径:src/main/resources/application.yml。
测试流程
-
CAS集成测试
- 访问
http://ruoyi.example.com/cas/login - 被重定向至CAS登录页
- 输入凭证后跳转回系统并自动登录
- 访问
-
OAuth2集成测试
- 访问
http://ruoyi.example.com/oauth2/login?provider=wechat - 完成第三方授权后返回系统
- 访问
总结与展望
本文详细介绍了RuoYi-Vue-fast集成CAS与OAuth2.0的实施方案,通过扩展框架的认证链与令牌生成机制,实现了多系统统一身份认证。企业可根据实际场景选择合适协议:CAS适用于内部系统整合,OAuth2.0更适合第三方应用接入。
后续可进一步探索:
- 基于SAML2.0的跨域认证
- 多因素认证(MFA)集成
- 认证日志审计与异常检测
官方文档:doc/若依环境使用手册.docx
核心安全模块:src/main/java/com/ruoyi/framework/security/
令牌服务实现:src/main/java/com/ruoyi/framework/security/service/TokenService.java
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



