解析CAS登录流程_cas tgc-程序员宅基地

技术标签: CAS  SSO  

        cas的诞生是为了解决单点登录问题,本质还是为了解决session的共享问题.
假设我的spring security不整合cas,那么怎么解决单点登录,也许你会想到许多类似cas的框架,但是若是没有这些框架,你要怎么实现:
        1.将session复制到每一个服务器?那么服务一多,响应时间不就很长了;
        2.使用一个中间件,redis或者传统的关系型数据库?传统型数据库,io操作一多,性能不就低了吗,redis可以实现,但是存在内存限制的问题.
        3.也许还有zookeeper监察机制的解决方法;
        有怎么多种的解决方法,我们为什么还需要像cas这样的框架呢?我说了一句废话
        Σ( ° △ °|||)︴,谁都想站巨人的肩膀上.要是我们自己实现,需要考虑安全等许多问题,这样为了一个简单功能,这样做就得不偿失了,而框架就解决了我们的顾虑.以cas为例.
        在第一访问的时候,cas会生成三个东西(不知怎么描述,感觉ticket不是很确切):
        1.TGT(Ticket Grangting Ticket)
        存储在cas server中,类似于session(感觉就是session);
        2.TGC(Ticket Granted Cookie)
        存储在web browser中,类似于jsessionid.好了tgt和tgc的关系,你可以类比为session和jsessionid(tomcat生成用于存储session的id的cookie名称)的关系,每次登陆cas server时,报文都会携带该cookie进行验证,判断用户是否为已登录用户,免用户名密码验证;既然tgc这么重要,那怎么保证安全性,这就不用你担心了,对此,cas实现了ssl(Secure Sockets Layer),避免了tgc被窃取的可能,也许有狠人.
        3.ST(service ticket)
        居然,上面这两种东西这么重要,那么我的cas client的ticket什么,就是ST,鉴于ST的重要性,只能使用一次,且存在时间极短(5min吧),意思就是cas client拿到ST,将其传输到server进行验证,通过了,ST就立马销毁,不存在二次消费的可能.ST是不进行存储的,直接通过url进行传参.
        说了这么多,按照我的理解概括,client判断无用户登录信息,将其重定向至server判断是否登录,然后发送一个票据(st)给client进行验证,验证通过了会开启会话(session),然后在浏览器存储一个jsessionid,下次重复登录,自己client就可以直接放行,不需要通过server.(好了,这里预埋一个坑,翻了一堆的源码,没有找到确切点.大致是,cas client会判断当前访问是有状态还是无状态,然后一套逻辑,判断当前访问的合法性,问题就在于,不同的client开启会话都会生成各自jsessionid,导致其它的client的jessionid被覆盖.结果就是交差访问不同的服务,会导致每次访问都需要重定向至server进行验证)

访问流程

        说了再多,也不如图片来的实在,接下来逐图分析spring security整合cas的3种登录流程(和cas流程差不多,区别就在secutity的权限控制的细粒度更高,还有就是开启session的时机不一样):

  1. 系统第一登录,访问A(9107)服务

    1.1 Web browser请求访问cas client,cas client先判断是否用户登录,没有用户登录信息,在验证是否有ticket,都没有,将信息重定向至cas server.下图:
    在这里插入图片描述
    1.2 重定向至cas server,提交用户名密码验证,成功后的报文
    在这里插入图片描述

        Σ( ° △ °|||)︴,图没有截取,jsessionid会不一致,将就吧
        1.3 重定向至cas client,验证票据
在这里插入图片描述
1.3 重定向至A 服务,访问成功
在这里插入图片描述

  1. 系统登录成功,访问B(9106)服务

2.1 A服务登录成功,访问B服务的资源,这时client重定向至server会携带CASTGC的cookie信息,进行匹配验证,省去用户登录的操作.
在这里插入图片描述

2.2重定向至cas server
在这里插入图片描述

2.3重定向至cas client
在这里插入图片描述

  1. 连续访问相同服务的情况

        不管是单纯的cas还是spring security整合cas的情况,当第一次访问该服务成功以后(secutity整合cas,不管成功还是失败会先开启会话;单纯的cas是ST验证通过之后开启会话),接下去,在不访问其他服务的情况下,继续访问该服务,不需要借助cas server验证,自己就可以根据jsession和自身的session进行验证,用户是否登录了该服务.
在这里插入图片描述
在这里插入图片描述
4. 交叉访问同一服务器下,不同端口号
在这种情况下,由于jssessionid的名称相同,导致cas客户端的局部会话(session)失效,导致频繁的访问cas服务器,产生过多的无效session对象。
解决方法:修改tomcat的session的cookie的名称即可。(设置流程请自行百度)
        其实还是有很多坑,留着以后有空再分析,还有其他的任务等着我,不能直接吊死在这可树上.

cas架构图:来自cas官方文档
在这里插入图片描述
        当分析完cas的验证流程,感觉只有垂直结构比较符合,cas的验证流程和思想,其中无意间浏览到官方文档的,其中的架构图,也验证了我的思想.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43143810/article/details/85250070

智能推荐

Git 服务器搭建与客户端安装-程序员宅基地

文章浏览阅读120次。大纲:一、前言二、搭建Git服务器yum安装Git服务器创建一个git用户,用来运行git服务创建客户端登录证书初始化Git仓库禁用shell登录克隆远程仓库三、安装客户端Windows 客户端Linux 客户端四、总结注,测试机 CentOS 5.5 x86_64,Git 服务器版本:g..._git rpm安装客户端

Cadence学习记录(一)元器件原理图绘制_cadence怎么自己画元器件-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏33次。Cadence学习记录(一)元器件原理图绘制_cadence怎么自己画元器件

Spring入门到精通:第五章 JdbcTemplate:5.JdbcTemplate操作数据库-查询操作_jdbctemplate获取remarks为空-程序员宅基地

文章浏览阅读1.5w次。这一节我们来讲一下查询:(1)查询表有多少条记录;(2)查询某条数据;(3)查询所有记录;一、演示查询(1)在BookDao添加几个查询方法:/**查询表有多少条记录*/int selectCount();/**查询某条数据*/Book findOne(int id);/**查询所有记录*/List<Book> findAll();(2)在BookDaoImpl添加几个查询方法的实现:public int selectCount(.._jdbctemplate获取remarks为空

Ubuntu—root用户权限设置_ubuntu root权限-程序员宅基地

文章浏览阅读2.1w次,点赞16次,收藏67次。Ubuntu—root用户权限设置_ubuntu root权限

EVE-NG 隐藏没有镜像的模板_删除eve-ng中的镜像-程序员宅基地

文章浏览阅读795次。eve-ng 默认情况下,在添加node时,会列出所有的模板,这样用着很不方便。通过以下方式,可以使没有的设备模板不可见。如下图,这样用起来就方便多了。_删除eve-ng中的镜像

windows下如何在命令行里切换到任意目录_win11命令行目录跳转-程序员宅基地

文章浏览阅读4.6k次,点赞2次,收藏10次。切换到C盘中的某个文件夹,比如AppData,可以执行命令cd AppData;但如果想切换到D盘,输入cd d:是不行的;如果我们要切换盘符的目录,正确的用法是在cd 和路径中间 增加一个“/d”,如cd /d d:也可以不用cd指令,直接用输入盘符:,如执行e:可以切换到E盘。..._win11命令行目录跳转

随便推点

ubuntu 系统监控工具_ubuntu 服务器 系统监控 大屏-程序员宅基地

文章浏览阅读2.8k次。ubuntu 16.04 系统监控工具ubuntu下的indicator-sysmonitor工具可以监控内存、CPU、CPU温度、网络等使用情况sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor sudo apt-get update sudo apt-get install indicator-sysmonito..._ubuntu 服务器 系统监控 大屏

Opencv、libopencv、Python-Opencv的区别-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏4次。最近在树莓派上安装opencv,准备用于深度学习方面的内容,结果总是在安装的时候傻傻分不清这三者的区别,总是傻瓜式的按照百度上的步骤安装。OpenCV is computer vision a library written using highly optimized C/C++ code. It makes use of multiprocessing in the background. I..._opencv-python和opencv一样吗

移植华为LiteOS_huawei liteos linux移植应用开发指南-程序员宅基地

文章浏览阅读1.4k次。1. 安装STM32CubeMX构建裸机工程,生成MDK-ARM V5 的工程2.拷贝 LiteOS 内核源码及测试相关代码拷贝arch, demos, kernel目录拷贝到middlewares/liteos中在Keil工程中添加.c 源文件,以及设置头文件路径3.拷贝OS_CONFIG 目录添加头文件路径。4. PendSV_Handler 和 SysTick_Handle..._huawei liteos linux移植应用开发指南

mysql merge 分表 效率_Mysql的Merge存储引擎实现分表查询-程序员宅基地

文章浏览阅读245次。对于数据量很大的一张表,i/o效率底下,分表势在必行!使用程序分,对不同的查询,分配到不同的子表中,是个解决方案,但要改代码,对查询不透明。好在mysql 有两个解决方案:Partition(分区,在MySQL 5.1.中实现) 和 Mysql Merge存储引擎。只是支持MyISAM引擎,而分区者没有限制。本文讨论 Mysql Merge存储引擎。CREATE TABLE t1 (a IN..._merge存储引擎查询效率

Ncnn使用详解(2)——Android端_dandroid_platform=-程序员宅基地

文章浏览阅读2.4w次,点赞7次,收藏59次。摘要本片文章基于你已经完成了这篇文章的学习,主要介绍如何将写好的c代码应用到Android项目中。环境说明系统:Ubuntu16.04 软件:Android Studio前期准备之ndk安装在正式开始前我们需要先下载安装ndk,这里介绍一种简单高效的方式,打开Android Studio,然后依次点击File-&gt;Settings-&gt;Appearance&amp;B..._dandroid_platform=

【转】快速读懂Android装置测试要领--浅谈常见产品问题风险与验证架构-程序员宅基地

文章浏览阅读126次。随着智能型手机与平板装置这几年在消费性电子领域的迅速崛起,各家厂商无不竭尽所能的竞相争逐。若以操作系统来作市场区分,撇开历史悠久的Nokia Symbian操作系统不谈,目前可说是苹果的iOS与Google的Android两雄相争,而RIM的Blackberry与微软的Windows Phone 7(以及最近新推出的Mango),则也前仆后继试图以不同的策略突破重围。 根据下图科技产业市调机构G..._bechmark验证产品化

推荐文章

热门文章

相关标签