基于CAS的单点登录实践之路

news2024/11/19 19:40:21

前言

上个月我负责的系统SSO升级,对接京东ERP系统,这也让我想起了之前我做过一个单点登录的项目。想来单点登录有很多实现方案,不过最主流的还是基于CAS的方案,所以我也就分享一下我的CAS实践之路。

什么是单点登录

单点登录的英文名叫做:Single Sign On(简称SSO)。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。之前我做的系统,需要需要设计一套支持单点登录的鉴权认证系统,所有系统都基于一套鉴权系统进行登录,并且可以实现各个系统之间的互信和跳转。所以就采用了CAS架构。

什么是CAS

CAS架构的核心是需要搭建一个CAS Server,该服务独立部署,拥有独立三级域名,主要负责对用户的认证工作。他主要组成包括WEB前端提供登录页面,票据模块,认证模块。

核心票据:

a. TGT(Ticket Grangting Ticket):TGT是CAS为用户签发的登录票据,有TGT就表明用户在CAS上成功登录过。用户在CAS认证成功后,会生成一个TGT对象,放入自己的缓存中(Session),同时生成TGC以cookie的形式写入浏览器。当再次访问CAS时,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及访问来源生成针对来源的ST,用户就不用再次登录,以此来实现单点登录。

b. TGC(Ticket-granting cookie):TGC就是TGT的唯一标识,以cookie的形式存在在CAS Server三级域名下,是CAS Server 用来明确用户身份的凭证。

c. ST(Service Ticket):ST是CAS为用户签发的访问某一客户端的服务票据。用户访问service时,service发现用户没有ST,就会重定向到 CAS Server 去获取ST。CAS Server 接收到请求后,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及访问来源生成针对来源的ST。用户凭借ST去访问service,service拿ST 去CAS Server 上进行验证,验证通过service生成用户session,并返回资源。

基于CAS的系统实践方案

1. 业务背景

在我负责的项目系统中,后台业务采用的是微服务架构,有统一的业务网关,所以基于统一的业务网关,整合客户其他系统登录鉴权流程。具体业务架构图如下:

在此说明一下,因为登录系统的用户体系在不同的系统中,所以我在设计SSO统一登录认证的时候,把SSO系统与业务系统结构出来。而用户体系有两套,一套叫做采方用户体系,一套叫做供方用户体系。所以才会有如图所示的SSO Server服务,他本身不负责用户管理,但会通过统一标准接口的方式实现控制反转,实现对用户服务的调用。

2. 单点登录时序图

时序图如下:

如图所示,时序图标识的是两个系统通过SSO服务,实现了单点登录。

3. 单点登录核心接口说明

3.1 sso认证跳转接口

调用说明:

由应用侧发起调用认证中心的接口。

URL地址:

https:// sso.com?appId=***&tenantType=1&redirectUri=***

请求方式:302重定向

参数说明:

appId: 对接SSO认证中心的应用唯一标识,由SSO认证中心通过线下的方式颁发给各个应用系统。

tenantType: 标记是供方登录还是采方登录。采方为1,供方为2.

RedirectUri: 应用回调地址。

3.2 重定向获取临时令牌code接口

调用说明:

有认证中心发起,应用侧需实现的接口。认证中心通过302重定向,将code传给应用侧,应用侧自行发起通过临时令牌code换取accessTokenInfo。

URL地址:

https://应用域名?code=***

请求方式:GET

参数说明:

Code: 临时令牌,有效时间5min

3.3 获取accessTokenInfo接口

调用说明

由应用侧发起调用认证中心的接口。通过该接口可以获取accessTokenInfo信息,然后系统自行生成本系统session信息。

URL地址:

https://sso.com/api/token/create?grantType=authorization_code&appId=yuncai&code=***

请求方式:GET

参数说明:

appId: 对接SSO认证中心的应用唯一标识,由SSO认证中心通过线下的方式颁发给各个应用系统。

code: 临时令牌,需加密

加密规则如下:

  1. Code先进行base64加密

  2. 用认证中心给的privateKey进行加密(RSA加密)。

  3. 加密后进行URLCode转码。

返回参数:

{
  “accessToken”:  “****”,  //token令牌
  “expiresIn”: 7200,        //过期时间
  “user”: {
    “username”: “zhangsan”,
       “fullName”: “张三”,
      “userId”: “1212”,
      “phone”: “13100000000”,
      “email”: zhangsan@test.com,
      “tenantId”: “S2131123”,
      “tenantType”: 1
  }
}


3.4 刷新Token接口

调用说明:

由应用侧发起调用认证中心的接口。当token快到失效期时,通过该接口可以刷新accessTokenInfo信息,然后系统自行生成本系统session信息。

URL地址:

https://sso.com/api/token/refresh?appId=yuncai&accessToken=***

请求方式:GET

参数说明:

appId: 对接SSO认证中心的应用唯一标识,由SSO认证中心通过线下的方式颁发给各个应用系统。

accessToken: 需要刷新的token值。

4. 单点登出逻辑

有单点登录,也会有单点登出,这样才会形成业务闭环,对于单点登出逻辑,基本类似登录的逆操作,时序图如下:

5. 单点登出核心接口说明

5.1 登出sso认证中心跳转接口

调用说明:

由应用侧发起调用认证中心的接口。

URL地址:

https://sso.com/logout?redirectUri=***

请求方式:GET

参数说明

RedirectUri: 应用回调地址。

5.2 应用系统退出接口 

调用说明

有认证中心发起,应用侧需实现的接口。通过该接口触发个应用系统清除缓存和session相关信息,实现系统登出。

URL地址:

https://应用系统域名/ssoLogout

请求方式:GET

 header: logoutRequest:=accessToken

总结

对于CAS这种单点登录的架构,他是非常依赖于cookie的安全性的。所以CAS的安全性也在一定程度上取决于cookie的安全性,所有增强cookie安全性的措施,对于增强CAS都是有效的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Random 类的使用

Java中的Random类是用来生成伪随机数的工具类。它可以用来生成随机的整数、浮点数和布尔值。以下是Java Random类的一些常见用法: 创建Random对象: Random random new Random();生成随机整数: int randomNumber random.nextInt(); // 生…

新手也能看懂:如何理解 K8s 声明式 API ?

我们知道 Kubernetes(以下简称“K8s”)中各种资源对象的数据是通过 K8s 的 API 进行提交并持久化到存储 etcd 中的(称为K8s对象),K8s 对象是使用 K8s 的接口,kubelet 客户端通过操作这些对象来使用K8s能力。…

uniapp使用空格占位符无效

uniapp文档&#xff1a; 错误写法&#xff1a; <text>筛 选</text> 正确写法&#xff1a; <text decode>{{ 筛 选 }}</text> //要加decode属性&#xff0c;且内容必须包裹在{{}}

无人驾驶实战-第十课(决策规划)

在七月算法上报了《无人驾驶实战》课程&#xff0c;老师讲的真好。好记性不如烂笔头&#xff0c;记录一下学习内容。 课程入口&#xff0c;感兴趣的也可以跟着学一下。 ————————————————————————————————————————— Planning是目前无…

openGauss学习笔记-32 openGauss 高级数据管理-批处理模式

文章目录 openGauss学习笔记-32 openGauss 高级数据管理-批处理模式32.1 语法格式32.2 参数说明32.3 示例 openGauss学习笔记-32 openGauss 高级数据管理-批处理模式 openGauss支持从文本文件执行SQL语句。openGauss提供了gsql工具实现SQL语句的批量处理。 以下场景建议使用批…

(JS逆向专栏十二)某乐平台网站登入RSA

声明: 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 名称:当乐 目标:登入参数 加密类型:RSA 目标网址:https://oauth.d.cn/auth/goLogin…

【前端 | CSS】5种经典布局

页面布局是样式开发的第一步&#xff0c;也是 CSS 最重要的功能之一。 常用的页面布局&#xff0c;其实就那么几个。下面我会介绍5个经典布局&#xff0c;只要掌握了它们&#xff0c;就能应对绝大多数常规页面。 这几个布局都是自适应的&#xff0c;自动适配桌面设备和移动设备…

Linux:管道命令与文本处理三剑客(grep、sed、awk)

1 管道命令&#xff08;pipe&#xff09;介绍 众所周知&#xff0c;bash命令执行的时候会输出信息&#xff0c;但有时这些信息必须要经过几次处理之后才能得到我们想要的格式&#xff0c;此时应该如何处置&#xff1f;这就牵涉到 管道命令(pipe) 了。管道命令使用的是|这个界定…

GaussDB数据库SQL系列-表连接(JOIN)

目录 一、前言 二、GaussDB JOIN 1、LEFT JOIN 2、LEFT JOIN EXCLUDING INNER JOIN 3、RIGHT JOIN 4、LEFT JOIN EXCLUDING INNER JOIN 5、INNER JOIN 6、FULL OUTER JOIN 7、FULL OUTER JOIN EXCLUDING INNER JOIN 三、GaussDB 实验示例 1、初始化实验表 2、LEFT …

苹果正在测试新款Mac mini:搭载M3芯片 配备24GB大内存

据悉苹果目前正在测试新的Mac机型&#xff0c;亮点是采用最新的M3芯片。 据报道&#xff0c;首款搭载M3芯片的设备应该是13英寸的MacBook Pro和重新设计的MacBook Air&#xff0c;Mac mini机型并不在名单上。 M3和M2同样拥有最多8个核心&#xff0c;分别为4个性能核和4个能效核…

FPGA运算单元可以支援高运算力浮点

随着机器学习(Machine Learning)领域越来越多地使用现场可编程闸阵列(FPGA)来加速推论(inference)&#xff0c;传统FPGA只支援定点运算的瓶颈日益突显。为了解决这一困境&#xff0c;Achronix设计机器学习处理(Machine Learning Processing&#xff1b;MLP)单元&#xff0c;不仅…

GreatSQL从单机到MGR扩展纪实

一、前言 原有的业务系统跑在MySQL主从架构中&#xff0c;高可用通过脚本完成&#xff0c;但存在切换数据丢失和切换不及时风险&#xff0c;调研了高可用更稳定的MGR后&#xff0c;准备入手一试。本篇文章主要记录GreatSQL从单机扩展到MGR的详细过程&#xff0c;遇到的问题及解…

【PCIE】AER和DPC解释

AER&#xff08;Advanced Error Reporting&#xff09;和 DPC&#xff08;Downstream Port Containment&#xff09;是PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;总线规范中定义的两种不同的错误处理机制&#xff0c;它们在PCIe架构中有一定的关联…

c++进阶--二叉搜索树模拟实现

目录 前言 一、二叉搜索树 1.二叉搜索树概念 2.二叉搜索树操作 二、二叉搜索树实现 0.定义一个节点 1.定义一棵树 2.增删改查 2.1.查找 2.2.插入 2.3.删除 2.3.1非递归删除法 a.只有左孩子 -- 删除14 b.只有右孩子-- 删除10 c.有左右孩子--删除8 2.3.2递归删除…

停车场收费系统ssm车辆车库管理jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 停车场收费系统 一个基于ssm框架的小系统 后端&…

计算机三级网络技术(持续更新)

BGP考点 A S&#xff1a;自治系统 BGP: Border Gateway Protocol&#xff08;当前使用的版本是 BGP-4&#xff09;外部网关协议 动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内&#xff0c;主要用来发现和计算路由&#xff0c;为AS内提供路由信息的交换&…

基于大数据为底层好用准确性高的竞彩足球比分预测进球数分析软件介绍推荐

大数据与贝叶斯理论在足球比赛分析与预测中的应用 随着科技的不断进步&#xff0c;大数据分析在各个领域的应用也越来越广泛&#xff0c;其中包括体育竞技。足球比赛作为全球最受欢迎的运动之一&#xff0c;也借助大数据和贝叶斯理论来进行模型分析和预测。本文将通过结合贝叶…

Java笔记(三十):MySQL(上)-- 数据库、MySQL常用数据类型、DDL、DML、多表设计

一、数据库 0、MySQL安装&#xff0c;IDEA配置MySQL 用MySQL installer for windows&#xff08;msi&#xff09;MySQL默认安装位置&#xff1a;C:\Program Files\MySQL\MySQL Server 8.0配置环境变量使用前先确保启动了mysql服务my.ini位置&#xff1a;C:\ProgramData\MySQL…

交替方向乘子

目录 一&#xff0c;交替方向乘子ADMM 1&#xff0c;带线性约束的分离优化模型 2&#xff0c;常见优化模型转带线性约束的分离优化模型 3&#xff0c;带线性约束的分离优化模型求解 4&#xff0c;交替方向乘子ADMM 本文部分内容来自教材 一&#xff0c;交替方向乘子ADMM …

初中信息技术考试编程题,初中信息技术python教案

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;初中信息技术python编程题库 网盘&#xff0c;初中信息技术python编程教学&#xff0c;今天让我们一起来看看吧&#xff01; ID:12450455 资源大小&#xff1a;934KB 资料简介: 2019-2020学年初中信息技术【轻松备课】P…