添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

单点登录的CAS实践

一、在谈项目实践之前,先说两个概念:

(1)ruoyi-vue:采用前后端分离的单体web框架,参见 介绍 | RuoYi ,使用MIT开源协议,对商业使用友好。

(2)CAS:英文为Central Authentication Service,即中央认证服务,为耶鲁大学发起的一个开源项目,是实现sso单点登录的框架。官网地址:
apereo.org/projects/cas 。关于spring secuity集成cas可参考: docs.spring.io/spring-s

CAS官方架构:
apereo.github.io/cas/de


CAS架构图

CAS执行逻辑:CAS分CAS Server和CAS Client。其中CAS Server用于分发和验证tickets,CAS Client从CAS Server检索授权用户的身份。

时序图参见:
apereo.github.io/cas/de

(1)访问服务: SSO 客户端发送请求访问应用系统。

(2)定向认证: SSO 客户端重定向请求到 CAS服务器。

(3)用户认证:用户身份认证。

(4)发放票据: 成功登录后,CAS服务器向用户发放TGT(ticket-granting ticket)全局票据,创建SSO会话。Server端是TGT,Client端是TGC(Ticket Granted Cookie),类似于session和cookie。同时TGT签发一个ST返回给浏览器(如不同应用请求,发现TGC对应了一个TGT,同样会签发ST)。

(5)验证票据: CAS服务器验证票据 Service Ticket (ST)的合法性,验证通过后,允许客户端访问服务。ST作为Url中的get参数传递。

(6)传输用户信息:CAS服务器验证票据通过后,传输用户认证结果信息给客户端。


CAS执行逻辑图

二、回到正题,如何在ruoyi-vue(3.8.1)项目中集成CAS呢。由于ruoyi-vue基于spring seruity。需集成spring-security-cas依赖。另外认证要增加和CAS服务端的集成。

本文参考: RuoYi-Vue前后端分离版集成cas_GGX-520的博客-CSDN博客_ruoyi分离版cas

后端集成:

1、common模块添加对CAS的支持。

<!-- 添加spring security cas支持 -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-cas</artifactId>
</dependency>

2、配置文件修改

#CAS
  server:
    host:
      #CAS服务地址
      url: http://localhost:8888/cas
      #CAS服务登录地址
      login_url: ${cas.server.host.url}/login
      #CAS服务登出地址
      logout_url: ${cas.server.host.url}/logout?service=${app.server.host.url}
# 应用访问地址
  #开启cas
  casEnable: true
  server:
    host:
      url: http://localhost:${server.port}
  #应用登录地址
  login_url: /
  #应用登出地址
  logout_url: /logout
  #前端登录地址
  web_url: http://localhost/

3、修改LoginUser.java

由于CAS认证需要authorities属性,在common模块中直接new HashSet():

@Override
public Collection<? extends GrantedAuthority> getAuthorities()
    return new HashSet();
}

4、在common模块中修改Constants.java

/**
 * CAS登录成功后的后台标识