CAS单点登录原理解析

2023-05-16

1、基于Cookie的单点登录的回顾

      

基于Cookie的单点登录核心原理:

      将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录了一次。

      该方式缺点就是多次传送用户名密码,增加被盗风险,以及不能跨域。同时www.qiandu.com与mail.qiandu.com同时拥有登录逻辑的代码,如果涉及到修改操作,则需要修改两处。

 

2、统一认证中心方案原理

      在生活中我们也有类似的相关生活经验,例如你去食堂吃饭,食堂打饭的阿姨(www.qiandu.com)告诉你,不收现金。并且告诉你,你去门口找换票的(passport.com)换小票。于是你换完票之后,再去找食堂阿姨,食堂阿姨拿着你的票,问门口换票的,这个票是真的吗?换票的说,是真的,于是给你打饭了。

      基于上述生活中的场景,我们将基于Cookie的单点登录改良以后的方案如下:

      

      经过分析,Cookie单点登录认证太过于分散,每个网站都持有一份登陆认证代码。于是我们将认证统一化,形成一个独立的服务。当我们需要登录操作时,则重定向到统一认证中心http://passport.com。于是乎整个流程就如上图所示:
      第一步:用户访问www.qiandu.com。过滤器判断用户是否登录,没有登录,则重定向(302)到网站http://passport.com。
      第二步:重定向到passport.com,输入用户名密码。passport.com将用户登录的信息记录到服务器的session中。
      第三步:passport.com给浏览器发送一个特殊的凭证,浏览器将凭证交给www.qiandu.com,www.qiandu.com则拿着浏览器交给他的凭证去passport.com验证凭证是否有效,从而判断用户是否登录成功。
      第四步:登录成功,浏览器与网站之间进行正常的访问。

 

3、Yelu大学研发的CAS(Central Authentication Server)

下面就以耶鲁大学研发的CAS为分析依据,分析其工作原理。首先看一下最上层的项目部署图:

      

部署项目时需要部署一个独立的认证中心(cas.qiandu.com),以及其他N个用户自己的web服务。

认证中心:也就是cas.qiandu.com,即cas-server。用来提供认证服务,由CAS框架提供,用户只需要根据业务实现认证的逻辑即可。

用户web项目:只需要在web.xml中配置几个过滤器,用来保护资源,过滤器也是CAS框架提供了,即cas-client,基本不需要改动可以直接使用。

 

4、CAS的详细登录流程

上图是3个登录场景,分别为:第一次访问www.qiandu.com、第二次访问、以及登录状态下第一次访问mail.qiandu.com。

下面就详细说明上图中每个数字标号做了什么,以及相关的请求内容,响应内容。

 

4.1、第一次访问www.qiandu.com

标号1:用户访问http://www.qiandu.com,经过他的第一个过滤器(cas提供,在web.xml中配置)AuthenticationFilter。

      过滤器全称:org.jasig.cas.client.authentication.AuthenticationFilter

      主要作用:判断是否登录,如果没有登录则重定向到认证中心。

标号2:www.qiandu.com发现用户没有登录,则返回浏览器重定向地址。

      

      首先可以看到我们请求www.qiandu.com,之后浏览器返回状态码302,然后让浏览器重定向到cas.qiandu.com并且通过get的方式添加参数service,该参数目的是登录成功之后会要重定向回来,因此需要该参数。并且你会发现,其实service的值就是编码之后的我们请求www.qiandu.com的地址。

标号3:浏览器接收到重定向之后发起重定向,请求cas.qiandu.com。

标号4:认证中心cas.qiandu.com接收到登录请求,返回登陆页面。

      

      上图就是标号3的请求,以及标号4的响应。请求的URL是标号2返回的URL。之后认证中心就展示登录的页面,等待用户输入用户名密码。

标号5:用户在cas.qiandu.com的login页面输入用户名密码,提交。

标号6:服务器接收到用户名密码,则验证是否有效,验证逻辑可以使用cas-server提供现成的,也可以自己实现。

      

      上图就是标号5的请求,以及标号6的响应了。当cas.qiandu.com即csa-server认证通过之后,会返回给浏览器302,重定向的地址就是Referer中的service参数对应的值。后边并通过get的方式挟带了一个ticket令牌,这个ticket就是ST(数字3处)。同时会在Cookie中设置一个CASTGC,该cookie是网站cas.qiandu.com的cookie,只有访问这个网站才会携带这个cookie过去。

      Cookie中的CASTGC:向cookie中添加该值的目的是当下次访问cas.qiandu.com时,浏览器将Cookie中的TGC携带到服务器,服务器根据这个TGC,查找与之对应的TGT。从而判断用户是否登录过了,是否需要展示登录页面。TGT与TGC的关系就像SESSION与Cookie中SESSIONID的关系。

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

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

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

标号7:浏览器从cas.qiandu.com哪里拿到ticket之后,就根据指示重定向到www.qiandu.com,请求的url就是上面返回的url。

      

标号8:www.qiandu.com在过滤器中会取到ticket的值,然后通过http方式调用cas.qiandu.com验证该ticket是否是有效的。

标号9:cas.qiandu.com接收到ticket之后,验证,验证通过返回结果告诉www.qiandu.com该ticket有效。

标号10:www.qiandu.com接收到cas-server的返回,知道了用户合法,展示相关资源到用户浏览器上。

      

      至此,第一次访问的整个流程结束,其中标号8与标号9的环节是通过代码调用的,并不是浏览器发起,所以没有截取到报文。

 

4.2、第二次访问www.qiandu.com

上面以及访问过一次了,当第二次访问的时候发生了什么呢?

标号11:用户发起请求,访问www.qiandu.com。会经过cas-client,也就是过滤器,因为第一次访问成功之后www.qiandu.com中会在session中记录用户信息,因此这里直接就通过了,不用验证了。

标号12:用户通过权限验证,浏览器返回正常资源。

 

4.3、访问mail.qiandu.com

标号13:用户在www.qiandu.com正常上网,突然想访问mail.qiandu.com,于是发起访问mail.qiandu.com的请求。

标号14:mail.qiandu.com接收到请求,发现第一次访问,于是给他一个重定向的地址,让他去找认证中心登录。

      

      上图可以看到,用户请求mail.qiandu.com,然后返回给他一个网址,状态302重定向,service参数就是回来的地址。

标号15:浏览器根据14返回的地址,发起重定向,因为之前访问过一次了,因此这次会携带上次返回的Cookie:TGC到认证中心。

标号16:认证中心收到请求,发现TGC对应了一个TGT,于是用TGT签发一个ST,并且返回给浏览器,让他重定向到mail.qiandu.com

      

      可以发现请求的时候是携带Cookie:CASTGC的,响应的就是一个地址加上TGT签发的ST也就是ticket。

标号17:浏览器根据16返回的网址发起重定向。

标号18:mail.qiandu.com获取ticket去认证中心验证是否有效。

标号19:认证成功,返回在mail.qiandu.com的session中设置登录状态,下次就直接登录。

标号20:认证成功之后就反正用想要访问的资源了。

      

 

5、总结

      至此,CAS登录的整个过程就完毕了,以后有时间总结下如何使用CAS,并运用到项目中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAS单点登录原理解析 的相关文章

  • 使用网络调试助手时,踩坑

    在使用网络调试助手时 xff0c 踩坑很多 xff1a 1 作为tcp的客户端 xff0c 或者服务端 xff0c 没有注意发送设置以ASCII还是HEX 导致目标环境接收解析数据异常出现段错误 2 xff1a 作为UDP作为客户端 xff
  • Win7 32 不能安装STM32 虚拟串口驱动解决方法

    1 对于一些精简过的系统 xff0c 无法安装虚拟串口 xff0c 是由于系统缺少mdmcpq inf和usbser sys文件所造成的 只需要将文件下载下来放在相应的文件夹下面就行了 文件对应的目录如下 xff1a mdmcpq inf在
  • gitee使用教程

    目录 版本控制 1 Gitee上注册账户 2 新建一个远程代码仓 xff0c 点击右上方的加号 3 修改远程仓为开源的 编辑 4 本地下载git 5 克隆远程仓到本地 xff0c 复制地址 6 创建代码并提交到远程仓库 7 将本地代码提交到
  • Telnet 接口的使用(一):Telnet的安装与开启

    什么是 Telnet 简介 telnet 用于远程登录 xff0c Telnet的工作方式为 服务器 客户端 方式 xff0c 它提供了从一台设备 xff08 Telnet客户端 xff09 远程登录到另一台设备 xff08 Telnet服
  • Android系统四层体系架构

    Android体系架构分为四层 xff1a 应用层 应用框架层 库层 内核层 xff08 盗用一张图 xff09 一 应用层 应用层包括手机上的所有APP xff0c 无论是系统自带的还是用户开发的 他们都是基于第二层应用框架层开发的 二
  • 芯片的开发板和评估板的区别

    评估版一般都是半导体生产厂家所提供的 xff0c 用于器件性能评估用 xff0c 大公司不用他来赚钱 xff1b 开发板大多说是通过板子赚钱的 xff0c 就是很多的网友工程师做的 xff1b 目标板是在开发产品的过程中 xff0c 相对于
  • 增量式pid+位置式PID(电机位置闭环控制)

    ps xff1a 2022更新 pid详细解释 一般很少用增量式 xff0c 都是用位置式 xff0c 下文增量式可以不看 本文分为几个部分 xff1a 1 编码器 2 定时器输入捕获 xff08 把定时器初始化为编码器模式 xff09 3
  • Vmware 扩容磁盘

    Vmware 扩容磁盘 第一步 xff0c 首先添加一块磁盘 xff0c 进行分区第二步 xff0c 创建物理卷加入组第三步 xff0c 进行扩容 目录第四步 xff0c 刷新逻辑卷 第一步 xff0c 首先添加一块磁盘 xff0c 进行分
  • 思科模拟器中的交换机使用方法

    思科模拟器中的交换机使用方法 思科模拟器中有较多种交换机型号 xff0c 这里只是简单的介绍一下二层交换机2960 xff0c 以及三层交换机中的3560 1 关于交换机的原理 xff1a 交换机是通过其保存的MAC地址表来进行工作的 xf
  • 计算机发展15件重大事件(图说)

    链接 xff1a https vision xitek com famous 201001 28 36559 html 一 1946年 xff0c 第一台电子计算机 埃尼阿克 问世 二 1976年 xff0c 苹果电脑Apple I现世 三
  • vsftp登录报530 Login incorrect无法登录问题解决

    vsftp登录报530 Login incorrect无法登录问题解决 今天在搭建FTP服务器的时候遇到了530 Login incorrect这个问题 通过修改配置文件解决了 总结了一下在搭建FTP服务器的时要注意的地方大概有下面这几点
  • Linux上SMB挂载提示mount: block device //xxx.xxx.xx.xx/xx is write-protected, mounting read-only时解决办法

    当在Linux上挂载SMB服务器时候有时会提示如下错误 xff1a root 64 test mount o username 61 lisi 192 168 23 32 smb test mount block device 192 16
  • Linux下的LAMP环境搭建时访问PHP页面时变成下载页面的原因

    在搭建LAMP环境的时候遇到了配置完PHP环境后测试访问PHP页面的时候却变成下载的情况 xff0c 主要的影响有一下两个方面 1 PHP的配置问题 2 主要原因是httpd conf配置文件内容出错大致有下面几个地方 xff1a Load
  • 服务器肉鸡/入侵被恶意利用的排查和优化方案

    排查方法 xff1a 1 账户方面 xff1a Windows xff1a xff08 1 xff09 检查服务器内是否有异常的账户 xff0c 查看下服务器内是否有非系统和用户本身创建的账户 xff0c 一般黑客创建的账户账户名 后会有
  • Opensuse如何安装桌面环境

    安装必须的范式 xff1a zypper install t pattern kde kde plasma 编辑 etc sysconfig displaymanager 文件并设定 DISPLAYMANAGER 61 kdm xff0c
  • 怎么用谷歌学术检索下载外文文献

    谷歌学术是一个可以免费搜索外文学术文章的搜索引擎 xff0c 包括了世界上绝大部分出版的学术期刊 xff0c 可广泛搜索学术文献 谷歌学术可了解有关某一领域的学术文献 xff1b 了解某一作者的著述 xff0c 并提供书目信息 xff08
  • 英文文献去哪里查找,8个超强英文文献查找网站建议收藏

    英文文献去哪里查找 xff1f 找对方向用对工具可大幅提升学习和研究效率 xff01 下面详细介绍8个查找英文文献非常好用的网站 一 文献党下载器 xff08 wxdown org xff09 xff1a 该网站几乎整合汇聚了所有文献数据库
  • 基于STM32系列的模拟串口(非阻塞式)

    STM32单片机一般少则3个串口 多则5个 而我这次的项目还偏偏5个硬件串口还是不够用 至于不够用的原因 哎 是项目做到后面有定制 随便哪个串口都省不得 没得办法 只能另想法子咯 板子上有几个预留IO口 可以用来模拟串口 模拟串口一般都选9
  • 复制一个目录下的所有文件到另外一个目录(Java实现)

    首先说说我的思路 xff0c 要复制一个目录下的所有文件到另外的一个目录下 xff0c 我们不知道目录下的结构是怎么样的 xff0c 也不知道目录有多少层 xff0c 文件有多少个 xff0c 这样我们会想用循环 xff0c for 但是我
  • RT-Thread嵌入式操作系统

    一 系统架构 RT Thread xff0c 全称是 Real Time Thread xff0c 顾名思义 xff0c 它是一个嵌入式实时多线程操作系统 RT Thread 主要采用 C 语言编写 xff0c 浅显易懂 xff0c 方便移

随机推荐

  • 1.javascript类型中你不知道的细节

    1 数据类型 基本数据类型 xff1a Undefined xff1b Null xff1b Boolean xff1b String xff1b Number xff1b Symbol xff1b Object 1 1 undefined
  • RT-Thread内核基础

    RT Thread内核基础 1 RT Thread 内核介绍 下图为 RT Thread 内核架构图 xff0c 内核处于硬件层之上 xff0c 内核部分包括内核库 实时内核实现 实时内核的实现包括 xff1a 对象管理 线程管理及调度器
  • 安装和配置VNC服务器的法则

    这是一个关于怎样在你的 CentOS 7 上安装配置VNC服务的教程 当然这个教程也适合 RHEL 7 在这个教程里 xff0c 我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置VNC 服务器 我们都知道 xff0c 作为
  • 阿里云轻量应用服务器使用教程

    阿里云轻量应用服务器怎么远程连接 xff1f 轻量服务器可以更换操作系统吗 xff1f 使用轻量应用服务器如何搭建网站 xff1f 轻量应用服务器端口如何开通 xff1f 阿里云百科来详细说下轻量服务器远程连接 搭建网站 开放端口等详细使用
  • 超详细!阿里内部都在用的K8S实战手册,新手看这一篇就够了

    一直关注云计算领域的人 xff0c 必定知道Kubernetes的崛起 如今 xff0c 世界范围内的公有云巨头 xff08 谷歌 亚马逊 微软 华为云 阿里云等等 xff09 都在其传统的公共云服务之上提供托管的Kubernetes服务
  • YOLO目标检测多种改进模型

    写于2020年11月 一 SlimYOLOv3 论文链接 xff1a arxiv org abs 1907 11093 代码链接 xff1a https github com PengyiZhang SlimYOLOv3 二 YOLOV3
  • 解决cv2.error报错解决方案

    问题摘要 xff1a 一般出现如下 xff1a 解决cv2 error OpenCV 4 2 0 C projects opencv python opencv 报错 cv2 error OpenCV 4 2 0 C projects op
  • YOLOv5网络结构分析

  • EraseNet:端到端的真实场景文本擦除方法

    六 相关资源 EraseNet论文链接 xff1a https ieeexplore ieee org document 9180003 EraseNet代码 xff1a https github com lcy0604 EraseNet
  • 《程序人生》

    对乔布斯和马斯克访谈的反思 xff1a 1 这个世界不在乎你的自尊 xff0c 只在乎你自我感觉良好的同时有所成就 说明大多数人的观点是 乌合之众 xff0c 必须有从想到去做到的能力 xff0c 面子是无能者维护尊严的盾牌 2 年轻时候一
  • DiffusionDet:Diffusion Model for Object Detection

    Diffusion Model for Object Detection 一种用于目标检测的扩散模型 Motivation 1 如何使用一种更简单的方法代替可查询的object queries 2 Bounding box的生成方式过去是三
  • springboot整合shiro的小demo(一)

    刚学shiro整合springboot xff0c 在此做一个笔记 xff0c 以便后期忘了查阅 本文分以下几个方面进行整合以及验证 xff1a 1 springboot项目搭建整合thymeleaf实现页面访问 2 springboot整
  • ChatGPT:通用人工智能设计范式方法

    通用人工智能设计范式未来发展方向 https openai com https riscv org 一 ChatGPT xff08 AIGC xff09 开启通用人工智能AGI新纪元时代 二 通用人工智能设计范式现状和方法 目前随着Chat
  • 格拉布斯法—异常值判断(异常值)

    数值数据类型 xff1a 方法一 xff1a Z Score 方法二 xff1a DBSCAN 方法三 xff1a Lsolation Forest 方法四 xff1a Mahalanobis距离 xff08 主要解决多元离散群点问题 xf
  • 你会为AI转型吗? 土豆的思考浅谈

    人工智能意味着什么 xff1f 终身学习与人工智能 复杂 读后感 0 经历 按照自己生活规律每天早上第一件事收发邮件这是昨天打开邮箱后看到的论文和相关论文推荐 xff0c 从1956年诞生以来到2013开始接触这个东西 xff0c 国内我曾
  • 神经网络的过去、现状、未来!

    从BP CNN RNN DCN GAN GNN图网络 GCN CAP三维卷积胶囊模型及融合 人工神经网络是计算智能和机器学习研究的最活跃的分支之一 xff0c 它是从人脑的生理结构出发探讨人类智能活动的机理 从 1943年 McCulloc
  • 场景理解类目标检测SENet

    论文 xff1a Squeeze and Excitation Networks 论文链接 xff1a https arxiv org abs 1709 01507 代码地址 xff1a https github com hujie fra
  • 目标检测发展方向(1)

    从目标检测发展到目标追踪 目标检测 xff08 监督学习 xff09 FasterRCNN CascadeRCNN YOLOX Complex YOLO SSD RetinaNet xff0c FOCS ATSS CornerNet Cen
  • 车道线检测与分割

    https github com amusi awesome lane detection VPGNet论文 xff1a https arxiv org abs 1710 06288 caffe 版code xff1a https gith
  • CAS单点登录原理解析

    1 基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理 xff1a 将用户名密码加密之后存于Cookie中 xff0c 之后访问网站时在过滤器 xff08 filter xff09 中校验用户权限 xff0c 如果没有权限