当前位置: 首页 > news >正文

cas单点登录流程揭密

前言

前几篇文章,经过大篇幅讲解了cas整合以及Cookie和Session。
springboot+vue集成cas单点登录最详细避坑版讲解
关于cookie和session的直观讲解(一)
关于cookie和session的直观讲解(二)
那么,接下来,我们就结合起来一起实战看看。

cas基础原理

在这里插入图片描述
就这几步。

下边令牌的概念,记住这几个东西的作用。

  • TGT:Ticket Granted Ticket(俗称大令牌,或者说票根,他可以签发ST)

  • TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根据他可以找到TGT。

  • ST:Service Ticket (小令牌),是TGT生成的,默认是用一次就失效了。也就是上面数字3处的ticket值。

实操

准备条件

  • 一个前端页面,作用是最后经过一系列的操作,定向到这个页面,并显示用户名;
  • 一个springboot整合cas客户端的后端;
  • cas服务端,用tomcat启动。

未登录,第一次请求

请求详细图:

不着急研究,先看完下边再回来看。在这里插入图片描述

  1. 三角图第一、二、三步,请求被重定向到cas登录

    首先我们访问后端接口:http://192.168.2.189:8010/lsdb-api/redirectToFrontend
    在这里插入图片描述
    看看浏览器做了什么?

    访问这个接口,一定是被cas拦截器拦截并且验证的,没有登录,那就重定向到cas服务端登录,输入账号密码之后,认证成功。
    在这里插入图片描述

    可以看到,登录成功了,确实响应了一个TGC令牌,而且cas这个Cookie的path设置的是/cas/,也就是说,只有访问这个地址(cas服务端)才会携带这个Cookie。
    此时,你的浏览器已经有了这个TGC令牌的Cookie。
    为了模拟,我们可以将后端改个端口,再用jar启动一份,这样在我们访问这个新的后端端口是,这个后端是没有Session的,所以,一定会去cas服务端认证,为什么不跳转登录页面,因为Cookie中有TGC。
    在这里插入图片描述
    当cas客户端拦截器将请求重定向到/cas/login时,浏览器发现path含有/cas/,于是就将TGC这个Cookie也带上了,这样服务端直接拿这个TGC去校验。
    在这里插入图片描述
    发现TGC有对应的TGT,就继续下边的步骤通过了。

  2. 三角图第四、五步,重定向请求后端地址并验证ticket
    在这里插入图片描述
    这里可以看出,cas服务端重定向到上个图响应的Location地址,也就是携带ticket的地址,同时cas客户端响应了一个JSESSIONID,说白了就是在获取Session的时候设置的一个Cookie,就相当于Sessionid,通过它能找到Session,这个Session里保存有用户登录状态,而且path设置的是/,这就意味着本次浏览器会话都会携带。
    可能有人说,我怎么没看见第五步去cas验证票据的访问,前边的请求图上确实没显示请求cas的地址,这是因为验证是cas客户端直接拿到ticket去访问cas服务端接口,验证结果是通过接口返回,并不是重定向,跟浏览器没关系,所以浏览器上并不会显示,验证也很简单,只需要把下边的cas验证地址改错,就能发现后端报错
    在这里插入图片描述

  3. 三角图第六步,cas服务端返回用户信息给cas客户端
    通过上边一个图可以看出,验证通过之后,响应了一个带jsessionid的地址,那么,这里自然也会重定向到这个地址,当访问这个地址的时候,因为携带了jsessionid,那么就会cas客户端就会通过jsessionid获取到Session,从而获得登陆状态,直接正常请求接口,执行接口逻辑即可。
    在这里插入图片描述
    可以看到,终于是正常请求我们自己写的接口,并且重定向到8081的前端页面。

登录之后,第二次请求

第二次登录就简单多了,因为已经登陆了,我们在访问cas客户端或者前端地址都会携带Cookie,这样,后端通过Cookie就能获取到Session,这样就直接代表已登录,直接访问了。
在这里插入图片描述
Cookie的值JSESSIONID都是一样的,这样,我们就能把前边了解的session和cookie知识串联起来,在实际上看到作用和效果了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】STL容器-string的遍历
  • pdf删除一页怎么删除?5种方法详细讲解,pdf删除页面实用技巧分享!
  • 网站收集-
  • 汽车免拆诊断案例 | 沃尔沃V40 1.9TD断续工作
  • QT绘图控件
  • Python中的内存池机制
  • 【C++】C++ STL 探索:List使用与背后底层逻辑
  • 坐牢第三十六天(QT)
  • Python编程实例-正则表达式在数据清洗中的使用技巧
  • Unity6的GPUDriven渲染到底是什么?
  • 基于CNN卷积神经网络迁移学习的图像识别实现
  • 【Linux 从基础到进阶】自动化备份与恢复策略
  • Ubuntu增强功能
  • Unity基本操作
  • HTTP 请求方式`application/x-www-form-urlencoded` 与 `application/json` 怎么用?有什么区别?
  • @jsonView过滤属性
  • Android Studio:GIT提交项目到远程仓库
  • Cookie 在前端中的实践
  • HomeBrew常规使用教程
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js
  • Kibana配置logstash,报表一体化
  • node-glob通配符
  • rabbitmq延迟消息示例
  • Vim 折腾记
  • Vue.js-Day01
  • 安卓应用性能调试和优化经验分享
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊聊hikari连接池的leakDetectionThreshold
  • 配置 PM2 实现代码自动发布
  • 问题之ssh中Host key verification failed的解决
  • 新手搭建网站的主要流程
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • # Kafka_深入探秘者(2):kafka 生产者
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • ${ }的特别功能
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (规划)24届春招和25届暑假实习路线准备规划
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (面试必看!)锁策略
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)C#调用WebService 基础
  • (转)大型网站的系统架构
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .Net 4.0并行库实用性演练
  • .net 4.0发布后不能正常显示图片问题
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)