CAS单点登录

CAS方式实现单点登录 单点登录,英文是 Single Sign On,缩写为 SSO。 多个站点(192.168.1.20X)共用一台认证授权服务器(192.168.1.110,用户数据库和认证授权模块共用)。用户经由其中任何一个站点(比如 192.168.1.201)登录后,可以免登录访问其他所有站点。而且,各站点间可以通过该登录状态直接交互。 CAS Server 为需要独立部署的 Web 应用。CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Jav... 阅读详情

背景

随着系统业务量的不断增长,单个系统的代码量越来越庞大,内部耦合越来越强,后期维护及扩展相当困难;
一般在这种情况下,我们都会采取对系统进行拆分,形成多个子系统,分开部署;
由于系统的拆分,我们又需要解决单点登录的问题。

CAS单点登录介绍

单点登录,指的是在多个应用系统中,用户只需要进行一次登录,就可以认证访问所有组件系统。单点登录有很多种实现方案,本案例总结主要关注Apereo的CAS实现方案,目前主要是基于该方案实现单点登录。
CAS单点登录流程
先来看下整体的流程图,了解下CAS单点登录整体是如何实现的:

在这里插入图片描述

  • 步骤1、用户访问集成了CAS客户端的子系统EPS;
  • 步骤2、CAS客户端的AuthenticationFilter过滤器在请求参数中没找到ST票据也没在Session中找到用户信息,返回302重定向,重定向的url上会带上请求的服务,如:http://localhost:8080/loginPage?service=http%3A%2F%2Flocalhost%3A8080%2Fhome,其中service后面即为请求的服务信息,后续各个步骤都会涉及到该服务,最终返回给用户的信息也是该服务所请求的内容;
  • 步骤3、302重定向到CAS服务端登录服务;
  • 步骤4、CAS服务端检查Cookie中的TGC,不存在或错误,返回登录页,正是因为这一步才实现了跨系统单点登录功能(如果TGC有效,则会直接签发ST票据,带上ST参数重定向到访问的服务直接到步骤7);
  • 步骤5、用户在CAS服务端的登录页上输入登录认证信息,点击提交;
  • 步骤6、CAS服务端认证通过后,会创建TGT(可以理解成全局Session),其中TGT的id即TGC会设置在response headers里,如Set-Cookie: CASTGC=TGT-1-01WxsZ5L7M6zGgx5MEXsnOQkyESextITsHlXnh5kXfXVt5yQZ2-HIKCAS,这个步骤很关键,用户的浏览器请求到这个响应后,会在对应的CAS服务端域下,创建该cookie,CAS之所以能实现单点登录,主要是基于该cookie实现的,注意浏览器对cookie的获取是不能跨域的,但是只要跳转到该域的页面,就可以获取到该域的cookie,这也是为什么CAS会有这么多跳转的原因。在该步骤中,创建完TGT后,还需要根据请求的服务签发一个ST票据,并返回302重定向,重定向的url为请求的服务带上ST参数;
  • 步骤7、URL中携带ST信息重定向到最初的服务请求,如http://localhost:8081/eps?st=ST-2-zr9dhBFIis4WAzdIePXk-HIKCAS;
  • 步骤8、CAS客户端的Cas20ProxyReceivingTicketValidationFilter过滤器拦截到ST参数,发起请求,向CAS服务端验证ST有效性,验证通过获取到用户信息;
  • 步骤9、验证通过,CAS服务端返回用户信息;
  • 步骤10、在CAS客户端根据ST从CAS服务端获取用户信息成功后,会往自己系统的session中设置用户信息,走完这一步,也就意味着该系统登录完成了,后续对该系统的访问,只需要判断session中是否有用户信息即可。

CAS单点登录时序图

登录流程时序图
时序图
注:以下示例流程图中CAS服务端和基础应用(Base系统)部署在一起,子系统为单独部署的一个子系统。
在这里插入图片描述
时序图中各个步骤概述:
用户第一次访问基础应用子系统A中受限的资源:
1、用户访问子基础应用系统A中受保护的资源;
2、基础应用子系统A检测到Session不存在,且请求参数中不包含ST信息,重定向到CAS服务端登录服务;
3、返回302重定向
4、重定向到CAS服务端登录服务
5、CAS服务端没有获取到TGC,或TGC不正确,返回登录页给浏览器;
6、用户输入账户密码提交到CAS服务端认证;
7、CAS服务端认证通过,创建TGT,签发ST,并在响应头中以Set-Cookie 形式,要求浏览器创建TGC Cookie;
8、返回302重定向
9、浏览器携带ST信息访问子系统A;
10、子系统A携带ST去CAS服务端验证;
11、CAS服务端验证ST通过,返回用户信息;
12、返回用户信息
13、子系统A创建Session,并存储用户信息,认证通过,返回受限资源给浏览器;
14、返回请求的页面信息
用户第二次访问基础应用子系统A中受限资源:
15、用户访问子系统A受保护的资源;
16、子系统A检测到Session中的用户信息,返回受限资源给浏览器;
17、返回请求的页面信息
用户第一次访问视频子系统B受限资源:
18、访问门户首页
19、用户访问业务子系统(视频子系统B)受保护的资源;
20、视频子系统B检测到Session不存在用户信息,重定向到CAS服务端登录服务;
21、返回302重定向
22、重定向到CAS服务端登录服务
23、CAS服务端从cookie中获取到TGC,并验证通过,签发ST;
24、返回302重定向到视频子系统B页面
25、浏览器携带ST信息访问视频子系统B;
26、视频子系统B携带ST去CAS服务端验证;
27、CAS服务端验证ST通过,返回用户信息;
28、返回用户信息给视频子系统B
29、子系统B创建Session,并存储用户信息,认证通过,返回受限资源给浏览器;
30、返回请求的视频子系统页面信息
登出流程时序图
在这里插入图片描述
时序图中各个步骤概述:
1、用户发起登出请求;
2、CAS服务端从cookie中获取TGC信息,调用destroyTicketGrantingTicket方法开始销毁TGT,
3、遍历由该TGC注册的所有服务,依次发出登出请求(发出的请求带上logoutRequest参数)
该请求会被CAS客户端的SingleSignOutFilter过滤器拦截,拦截后会根据ST从sessionMappingStorage(维护了ST票据和Session的关系)中获取session信息,并销毁;
4、登出请求(基础应用), 同步骤3;
5、CAS客户端销毁基础应用子系统Session
6、CAS客户端销毁子系统Session
7、CAS服务端销毁TGC(清除Cookie),重定向到登出页;

CAS单点登录集成开发过程中的常见问题总结

Session过期、TGT过期问题
首先TGT的过期时间一定要大于Session的过期时间,否则有可能出现TGT已过期,而Session未过期,导致访问其它子系统时,需要重新登录;
由于Session过期机制是会自动延长的,所以无论TGT设置多久,理论上都有可能出现TGT已过期Session未过期的情况;
解决此问题的方案是仿造session过期机制,每隔一段时间,自动调用CAS服务端接口,去重置TGT的最近使用时间,从而延长TGT过期时间;

前后端分离,前端是单页应用,且都是ajax请求问题
目前前后端分离,单页应用的前端开发模式越来越流行,且一般通过ajax请求去获取后端数据,这种前端开发模式去集成Apereo的CAS方案,往往需要做一些调整;
后端不直接返回302重定向,而是和前端做一个约定,如在响应头中加入相应标记,标记该响应需要做跳转处理,以及跳转的URL信息;

有了TGC,为什么还需要ST
假设用户已经登录A系统,然后访问B系统,这时需要建立B系统的session,首先、因为B系统Session不存在用户信息,会重定向到CAS服务端去验证Cookie中的TGC,因为验证TGC是在CAS服务端验证的,而B系统Session的建立,需要B系统后端服务自己去创建Session,设置Session内容,所以这种不通过ST的方式是不能设置B系统的session信息;
而通过签发ST票据,CAS服务端返回一个302重定向,就可以让B系统自己拿着ST去CAS服务端请求用户信息,然后将获取到的用户信息设置到B系统的session中,就OK了。
可能有人会说为什么不直接拿着TGC去验证获取用户信息,然而关键是B系统不能直接获取到TGC,需要重定向到CAS服务端后才能获取该域下Cookie中存储的TGC信息。

CAS单点登录从入门到部署 当我们访问其他的应用,与前面的步骤也是基本相同,首先用户访问受保护的资源,跳转回浏览器,浏览器含有先前登录的CASTGC cookie,CASTGC cookie包含了TGT并发送到CAS认证中心,CAS认证中心校验TGT是否有效,如果有效分发浏览器一个带ST参数的资源地址URL,应用程序拿到ST后,再发送给CAS认证中心,如果认证了ST有效后,结果会返回一个包含成功信息的XML给应用。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。PGT是ST签发的。 阅读详情

相关推荐

cas单点登录流程揭密

cas中的Cookie、Session运用流程

zwjzone的博客 2412

单点登录CAS实现

当用户尝试访问其他应用程序或系统时,这些应用程序或系统会向身份提供者发送身份验证请求,并使用之前获得的授权令牌进行授权。单点登录(Single Sign-On,简称SSO)是一种身份验证技术,它允许用户使用一组凭据(如用户名和密码)登录到多个应用程序或系统中,而无需在每个应用程序或系统中单独登录。当用户尝试访问其他应用程序或系统时,这些应用程序或系统会检查Cookie中的身份验证信息,并使用该信息进行身份验证和授权。使用单点登录技术,员工可以在这些应用程序之间无缝地切换,而无需在每个应用程序中单独登录。

weixin_46894136的博客 9402

CAS——实现单点登录

正常单点登录的效果是:用户只需要登录一次就可以访问所有相互信任的应用系统,也就是这两个应用,当第一个登录成功之后,登录第二个应用可以不用输入CAS端验证的用户名和密码了,直接跳转到系统内。 在一切都配置好了之后本以为会实现单点登录的效果,可是对于CAS,事与愿违的事情总是太多。在Application1登录成功之后,Application2并没有直接跳转,而是需要重新登录的。在宏杰大牛的帮助下终于实现了。修改了CAS客户端的配置。过程是酱紫的:

许小乖……是总攻 4910

三、SpringBoot集成CAS 单点登录,CAS Client。CAS 单点登录动态开关。

目录CAS 简介二级目录三级目录 CAS 简介 1、CAS 单点登录分为两个部分,第一个是认证中心 Cas Server,第二个是 Cas Server。 我们使用 SpringBoot 集成 Cas 只需要集成Client。 2、CAS API官方文档 3、cas 简介博客 二级目录 三级目录 ......

uziuzi669的博客 1万+

Jmeter之压测CAS单点登录

现在公司项目很多都使用cas单点登录,那么在使用Jmeter做压测时,需要对录制的脚本进行一些相关配置,下面内容是我看了各方资料,最后成功跑通了,记录一下,在这里记录分享给大家。

嘘!别说话! 2172

CAS单点登录详细流程

一、CAS简介和整体流程 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: 【1】开源的企业级单点登录解决方案。 【2】CAS Server 为需要独立部署的 Web 应用。 【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的...

dl71181的博客 1406

基于CAS实现单点登录

CAS 一、概述 CAS是中央认证服务Central Authentication Service的简称。最初由耶鲁大学的Shawn Bayern 开发,后由Jasig社区维护,经过十多年发展,目前已成为影响最大、广泛使用的、基于Java实现的、开源SSO解决方案。 2012年,Jasig和另一个有影响的组织Sakai Foundation合并,组成Apereo。Apereo是一个由高等学术教育机...

高興 7163

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712

LT8711UX是一款高性能C/DP1.2型至HDMI2.0转换器,用于将USB Type-C源或DP1.2源连接到HDMI2.0接收器。该LT8711UX集成了一个DP1.2兼容的接收器,和一个HDMI2.0兼容的发射器。此外,还包括两个CC控制器,用于CC通信,以实现DP Alt模式和功率传输功能,一个用于上游Type-C端口和另一个用于下游端口。

weixin_63518914的博客 1639

CAS单点登录原理

之前我们谈了如何关于单点登录的一些概述,讲到了当跨域名单点登录时,CAS的设计具有参考价值,那么这篇就该谈谈CAS的具体原理了。 CAS单点登录 CAS指的是Apereo的CAS开源项目,三个字母分别是是Central Authentication Service的首字母缩写。 官方地址: 网址:https://www.apereo.org/projects/cas git:https:...

not_easy的专栏 4120

linux下使用Ollama本地部署LLM

Ollama 是一个用于在本地运行大语言模型(如 Llama 2、Mistral、Gemma、Qwen 等)的工具,支持模型的拉取、运行、管理等功能。当你运行ollama。

u013218342的博客 1659

STM32--基于STM32F103C8T6的OV7670摄像头显示

使用 STM32F103C8T6 微控制器驱动 OV7670 摄像头模组,并将图像数据显示在屏幕上,是嵌入式系统中常见的图像采集与显示应用。OV7670 是一款 CMOS VGA 图像传感器,具有高灵敏度、低电压等特点,适用于嵌入式应用。而 STM32F103C8T6 是一款常用的 MCU 控制器,具有丰富的管脚资源和较高的工作频率。

duierrorshuobu的博客 2145

面试题—CAS单点登录

目录1.什么是单点登录?2.什么是CAS?3.CAS框架结构4. CAS中3个术语5.cas处理流程 1.什么是单点登录? 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 2.什么是CAS? CAS框架:CAS(Central Authentication Service,即:统一认证服务)是实现SSO单点登录的...

java coding girl 2965

UE4/5编译报错MSB3073终极解决指南:从路径检查到MSVC版本降级

本文针对UE4/5开发中常见的MSB3073编译报错,提供了一套从根源到实战的终极解决指南。文章系统性地讲解了错误成因,并分层次指导排查路径字符、环境变量、MSVC版本兼容性、权限冲突等核心问题,重点介绍了通过降级MSVC编译器版本等关键操作来彻底解决此编译难题。

rl6adventurer的博客 1432

CAS实现单点登录

1.单点登录的概念 比如我们做了一个平台,baidu,平台中有很多的产品,那么这些产品要共用一个登录系统来进行登录,这个登录系统就叫做单点登录SSO。 CAS是什么呢? 适用于微服务状况下的一个单点登录的框架CAS。 2.单点登录的配置 1>:去网上下载CAS的源码 可以从GitHub上下载CAS的源码,但是打包工具要用gradle. 2>:将这个源码打包成一个war包,...

DmxExcalibur的博客 726

【车辆动力学】专栏目录汇总

车辆动力学知识目录汇总

CrazyRabbit的博客 1713

wsl2上运行带有Isaac Gym的程序报错: GPU Pipeline: disabled

显示GPU Pipeline:disabled,查找相关文档发现是WSL2目前不支持Isaac Gym,时,想要在wsl2上运行,最后报错如下。

2303_78660611的博客 956

CAS 实现的单点登录

——任何的成功都不是一蹴而就,经验需要慢慢积累、沉淀! 项目里面用到了CAS单点登录,最近也简单的从应用层面简单研究了下CAS这个开源架构。 1. 基本概念:cookie, session, 会话cookie, jssessionid - cookie 和 session机制都是为了解决HTTP协议的无状态性而生的 - cookie 是客户端保存用户信息的机制 - sessi

Jeff 的专栏 5494

GEE数据融合——Landsat (collection 2,level 2 )4、5、7、8、9长时间序列影像数据融合和视频导出分析

长时间序列影像数据融合是指将Landsat影像数据集合2级2(Level 2)中的4、5、7、8和9这五个卫星的数据进行融合。具体来说,这包括将同一地点的多个卫星影像数据进行处理和整合,以产生一个单一的、具有更高质量的影像产品。在长时间序列影像数据融合中,首先需要对不同卫星的影像数据进行校正,以消除不同卫星之间的光谱差异、辐射度问题和几何纠正误差等。然后,通过使用融合算法,将多个卫星的影像数据进行组合,以生成一张全新的、高质量的合成影像。

此星光明博客 1733
上一篇: Linux下查看文件内容
下一篇: AQS简单学习
余生之君
博客等级 码龄10年 246粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值