您的位置 首页 java

单点登录的CAS实践

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

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

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

CAS官方架构:。

CAS架构图

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

时序图 参见:。

(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服务端的集成。

本文参考:

后端集成:

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

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

2、配置文件修改

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

3、修改LoginUser.java

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

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

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

 /**
 * CAS登录成功后的后台标识
 */public  static  final String CAS_TOKEN = "cas_token";

/**
 * CAS登录成功后的前台Cookie的Key
 */public static final String WEB_TOKEN_KEY = "Admin-Token";  

5、在framework模块config.properties下新增CasProperties.java

CasProperties代码

6、在framework模块web.service下新增CasUserDetailsService.java

CasUserDetailService代码

7、在framework模块security.handle下添加CasAuthenticationSuccessHandler.java

CasAuthenticationSuccessHandler代码

8、在framework模块config.SecurityConfig下修改SecurityConfig。(setCasServerUrlPrefix 从cas-client 3.6.0已移除)

SecurityConfig代码

前端集成:

1、修改settings.js

settings.js代码

2、修改permission.js,判断没有token时访问cas登录页面

permission.js 代码

3、修改 request .js、Navbar.vue,登出后不做响应

request.js代码

Navbar.vue代码

4、修改user.js,登出后跳转到cas登出页面

user.js代码

另外CAS Server需另外搭建。地址为:

文章来源:智云一二三科技

文章标题:单点登录的CAS实践

文章地址:https://www.zhihuclub.com/186868.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图