<返回更多

单点登录CAS集成原理和应用验证

2022-08-31    数字说
加入收藏

单点登录 (SingleSign-On,SSO) ,是一种帮助用户快捷访问网络中多个站点的安全通信技术。单点登录系统基于一种安全的通信协议,该协议通过多个系统之间的用户身份信息的交换来实现单点登录。使用单点登录系统时,用户只需要登录一次,就可以访问多个系统,不需要记忆多个口令密码。

云程平台支持CAS、OAuth2、JWT三种主流的单点登录技术,客户可根据需求选择对应技术方案。

一、CAS总体架构介绍

CAS(Central Authentication Service)是 Yale大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法。CAS的目标是允许用户访问多个应用程序只提供一次用户凭据(如用户名和密码)。

CAS 体系包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

 

CAS 具有以下特点:

CAS官方文档:https://apereo.github.io/cas/5.3.x/index.html#

二、CAS单点原理和集成流程

在 CAS 的整个登录过程中,有三个重要的概念。

  1. TGT:TGT 全称叫做 Ticket Granting Ticket,这个相当于我们平时所见到的 HttpSession 的作用,用户登录成功后,用户的基本信息,如用户名、登录有效期等信息,都将存储在此。
  2. TGC:TGC 全称叫做 Ticket Granting Cookie,TGC 以 Cookie 的形式保存在浏览器中,根据 TGC 可以帮助用户找到对应的 TGT,所以这个 TGC 有点类似与会话 ID。
  3. ST:ST 全称是 Service Ticket,这是 CAS Sever 通过 TGT 给用户发放的一张票据,用户在访问其他服务时,发现没有 Cookie 或者 ST ,那么就会 302 到 CAS Server 获取 ST,然后会携带着 ST 302 回来,CAS Client 则通过 ST 去 CAS Server 上获取用户的登录状态。

CAS的单点登录SSO流程如下, 应用系统要做单点登录,需要跟CAS服务进行集成,首先要理解CAS集成流程和原理。

 

  1. 用户通过浏览器访问应用1,应用1 发现用户没有登录,于是返回 302,并且携带上一个 service 参数,让用户去 CAS Server 上登录。
  2. 浏览器自动重定向到 CAS Server 上,CAS Server 获取用户 Cookie 中携带的 TGC,去校验用户是否已经登录,如果已经登录,则完成身份校验(此时 CAS Server 可以根据用户的 TGC 找到 TGT,进而获取用户的信息);如果未登录,则重定向到 CAS Server 的登录页面,用户输入用户名/密码,CAS Server 会生成 TGT,并且根据 TGT 签发一个 ST,再将 TGC 放在用户的 Cookie 中,完成身份校验。
  3. CAS Server 完成身份校验之后,会将 ST 拼接在 service 中,返回 302,浏览器将首先将 TGC 存在 Cookie 中,然后根据 302 的指示,携带上 ST 重定向到应用1。
  4. 应用1 收到浏览器传来的 ST 之后,拿去 CAS Server 上校验,去判断用户的登录状态,如果用户登录合法,CAS Server 就会返回用户信息给 应用1。
  5. 浏览器再去访问应用2,应用2 发现用户未登录,重定向到 CAS Server。
  6. CAS Server 发现此时用户实际上已经登录了,于是又重定向回应用2,同时携带上 ST。
  7. 应用2 拿着 ST 去 CAS Server 上校验,获取用户的登录信息。
  8. 在整个登录过程中,浏览器分别和 CAS Server、应用1、应用2 建立了会话,其中,和 CAS Server 建立的会话称之为全局会话,和应用1、应用2 建立的会话称之为局部会话;一旦局部会话成功建立,以后用户再去访问应用1、应用2 就不会经过 CAS Server 了。

三、CAS服务端如何部署

云程平台对CAS 5.3.x版本无缝集成,并对CAS认证校验进行了扩展,项目上请使用平台提供的CAS 5.3.x运行包。运行CAS之前需要在数据库先执行平台的脚本,CAS获取用户信息需访问平台的SYS_USER表。

1 修改数据库连接

打开 casWEB-INFclassesApplication.properties

修改如下配置:

#数据库配置

spring.datasource.driver-class-name=com.MySQL.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/yuncheng2021?characterEncoding=UTF-8&useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

2 启动cas

需要准备Tomcat,把cas包放到tomcat/webapps目录下,在tomcat/bin目录下执行startup.bat(windows)或startup.sh(linux)。

启动成功后访问cas地址,界面如下图所示:

 

四、云程如何对接CAS

平台后端CAS配置

云程平台后端已集成CAS代码,在yml配置文件中配置cas服务地址即可。

application.yml 进行如下配置:

#cas单点登录
cas:
prefixUrl: http://cas.example.org:8443/cas

平台前端CAS配置

修改
public/config/bootConfig.js

VUE_APP_SSO设置为true

VUE_APP_CAS_BASE_URL配置单点登录服务地址

//单点登录是否开启
VUE_APP_SSO:true,
//单点登录地址
VUE_APP_CAS_BASE_URL:"http://cas.example.org:8443/cas"
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>