CAS单点登录原理解析

CAS单点登录原理解析

    SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS是一种基于http协议的B/S应用系统单点登录实现方案,认识CAS之前首先要熟悉http协议、Session与Cookie等Web开发基本知识。

1.http协议

    HTTP是一个客户端和服务器端请求和应答的标准,我们全后端开发对接的Rest接口就是基于http协议。http协议包含http请求消息(HttpRequest)和http应答消息(HttpResponse)两部分。参考内容:https://www.cnblogs.com/rayray/p/3729533.html

  • 理解http协议是无状态协议的含义
  • 熟记常见的http协议状态码,其中302等与cas相关
  • 熟记常见的http请求头,其中Cookie等与cas相关
  • 熟记常见的http应答头,其中Set-Cookie、Location等与cas相关

2.Session与Cookie会话机制

    http协议本身是无状态的,但有时候我们需要http请求保持状态,我们引入Session与Cookie。
Session用在服务端,用于存储当前所有客户端需要保持的状态值,并为每一个客户端生成一个唯一编码,然后通过http响应头Set-Cookie将这个编码发送给客户端。

    Cookie用在客户端,用于记录后端发来过的唯一编码,该编码与服务端上的对应的状态值对应,在下一次请求的时候通过http请求头Cookie带上这个编码,服务端就能根据这个编码获取该客户端之前记录的所有状态值。

 

3.普通登录

    登录成功后,在Session中写入登录用户的信息,退出时清空Session中的用户信息。可以通过filter实现。

4.CAS单点登录| 两次前端跳转、一次后端验证

4.1首次访问(访问第一个应用系统App1)

    CAS首次登录会经过两次前端跳转、一次后端验证。在应用系统端需要集成CasClient的jar包,把其中的filter配置到站点web.xml中,用于拦截请求、判断登录、发起跳转或发起验证等。在SSO服务器上部署CasServer的war包,需要配置用户数据源,根据需求修改登录页面。

   第一次前端跳转:客户端访问应用系统,应用系统判断Session发现未登录,返回302跳转到sso登录页面,并传递service参数给sso,该service参数有两个作用:

  1. service一般传递应用系统url地址,用于sso认证通过后回跳到应用系统;
  2. service参数同时会被cas服务端的作为cas客户端的唯一标记记录下来,用于后期匹配相应的认证凭据;

   第二次前端跳转:浏览器显示登录页面,用户输入账号密码登录成功后,sso会返回302跳转回到原来请求的应用系统页面,并携带ticket参数,作为认证票据,同时通过Set-Cookie向浏览器记录TGT,(TGT的作用将在下一个应用系统需要登录的时候体现出作用,是避免重复登录的关键)

    一次后台验证:应用系统接收到带有ticket的请求后,从后台直接向sso服务器发起一个http请求,将service和ticket作为参数,用于验证ticket的有效性;如果ticket有效,sso服务器将返回该ticket对应的登录用户名。

4.2再次访问(访问第二个应用系统app2)

    当用户已经登录过一个应用系统以后,在同一个浏览器上访问第二个应用系统,根据单点登录的要求此时不应该再登录,而是直接进入第二个系统。但是实际上还是需要经过两次前端跳转、一次后端验证,只不过此时的两次跳转是连续的,中间不会再出现登陆页面,用户感受不到。判断的依据就是前面第4步通过Set-Cookie保存到客户端的TGT(Ticket Granted Cookie )。

    相比首次访问,少了之前的第3步(不需要再出现登录页面),因为此时在第二步跳转时,携带了之前保存的TGT,cas服务端通过TGT可以得知用户信息,因此直接生成ticket返回给应用系统。所以此时是两次连续的302跳转,用户看到的效果就是直接进入第二个应用系统了。

5. 案例讲解

5.1 循环跳转异常案例

    异常现象说明:某项目前后端分开部署出现这样一个现象,前端映射域名为http://xxx.gov.cn/zpsgl,后端映射域名为http://xxx.gov.cn/zpsgl/rest,单独访问后端登录没有任何问题,但是访问前端登陆后界面出现反复跳转不停刷新的问题。

    异常排查:循环跳转原理,SSO登录后返回应用系统,应用系统后台认证获取用户信息存入Session,由于某种原因造成Session信息丢失,导致应用系统认为还未登录,于是又跳转SSO,此时SSO已经登录不会再出登陆页面,直接生成ticket返回应用系统,应用系统Session再次丢失,进入反复跳转认证的死循环,前端界面表现为不停的刷新。

    因此关键问题在于分析Session信息丢失的原因,一般来讲有两种可能:1是系统本身逻辑问题把之前写入Session的登录信息清空了,2是两个站点的cookie作用域相同而相互覆盖,从而导致后台Session被重置。

    分析发现该项目属于第二种情况,前后端cookie都在http://xxx.gov.cn/域下面,解决办法修改cookie作用域或者修改cookie中Jsessionid的命名,防止相互覆盖。

转载于:https://www.cnblogs.com/ArtofDesign/p/10566329.html

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

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

相关文章

数据结构05数组和广义表

第五章 数组 和 广义表 数组和广义表可以看成是线性表在下述含义上的扩展:表中的数据元素本身也是一个数据结构。 5.1 数组的定义 n维数组中每个元素都受着n个关系的约束,每个元素都有一个直接后继元素。 可以把二维数组看成是这样一个定长线性表&…

数据结构06树和二叉树

第六章 树和二叉树 6.1 树的定义和基本术语 树 Tree 是n个结点的有限集。 任意一棵非空树中: (1)有且仅有一个特定的称为根(root)的结点; (2)当n>1时,其余结点可…

CountDownLatch,CyclicBarrier和Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。以下是本文目录大纲:一.CountDownLatch用法二.CyclicBarrie…

数据结构07排序

第十章内部排序 10.1 概述 排序就是把一组数据按关键字的大小有规律地排列。经过排序的数据更易于查找。 排序前KiKj,且Ki在前: 排序方法是稳定的,若排序后Ki在前; 排序方法是不稳定的,如排序后Kj在前。 分类: 内…

数据结构08查找

第九章 查找 另一种在实际应用中大量使用的数据结构--查找表。 所谓查找,即为在一个含有众多的数据元素的查找表中找出某个“特定的”数据元素。 查找表 search table 是由同一类型的数据元素构成的集合。集合中的数据元素之间存在着完全松散的关系,故…

下载Centos7 64位镜像

下载Centos7 64位镜像 1.打开Centos官网 打开Centos官方网站地址:https://www.centos.org/,点击Get CentOS Now 2.点击Minimal ISO镜像 Minimal ISO镜像,与DVD ISO镜像的差别有很多,这里只说两点 1.Minimal ISO类似于Windows的纯净…

Scala01入门

第1章 可伸展的语言 Scala应用范围广,从编写脚本,到建立大型系统。 运行在标准Java平台上,与Java库无缝交互。 更能发挥力量的地方:建立大型系统或可重用控件的架构。 将面向对象和函数式编程加入到静态类型语言。 在Scala中&a…

Java网络01基本网络概念

协议 Protocol:明确规则 (1)地址格式; (2)数据如何分包; ... TCP/IP四层模型: 应用层 HTTP SMTP POP IMAP 传输层 TCP UDP 网际层 IP 主机网络层 host to host layer 数模、…

Java网络02基本Web概念

URI Uniform Resource Identifier 同一资源标识符 以特定语法标识一个资源的字符串 绝对URI:URI模式模式特有部分 scheme:scheme-specific-part scheme分为: data file本地文件系统 ftp http telnet urn 统一资源名 scheme-specific-part为&am…

解决自建ca认证后浏览器警告

前一篇讲解了基本的建立证书的过程,但是建立后总是会在浏览器那里警告: 此链接不是私密链接 --谷歌浏览器 此证书颁发机构不可信 此证书不是这个网站的 --ie浏览器 总之证书是生成成功了,但是其中的内容填写错误了&a…

Java网络03流

网络程序所做的很大一部分工作只是输入和输出:从一个系统向另一个系统移动数据。 输出流 Java的基本输出流类是java.io.OutputStream: public abstract class OutputStream 这个类提供了写入数据所需的基本方法,包括: public abstract vo…

基于微信小程序开发的仿微信demo

(本文参考自github/liujians,地址:https://github.com/liujians/weApp) 作者声明: 基于微信小程序开发的仿微信demo 整合了ionic的样式库和weui的样式库 使用请查看使用必读! 更新日志请点击这里 目前功能 查看消息 网络请求获取数据(download示例server…

解决idea 中web项目无法正常显示的问题

转载于:https://www.cnblogs.com/nulijiushimeili/p/10575364.html

分享一个前后端分离的web项目(vue+spring boot)

Github地址:https://github.com/smallsnail-wh 前端项目名为wh-web后端项目名为wh-server项目展示地址为我的github pages(https://smallsnail-wh.github.io)用户名:admin,密码admin(第一次启动会比较慢&am…

部署php项目到linux

服务器:39.106.26.67rootBayou2009 数据库:rootbayou2009 项目文件夹路径:/home/www/项目文件夹名称:education.bayou-tech.cn 绑定域名:education.bayou-tech.cn 绑定域名: 用ftp把配置文件下班到windows修…

ZooKeeper安装配置

配置 1、在conf目录下创建一个配置文件zoo.cfg tickTime2000 dataDir.../zookeeper/data dataLogDir.../zookeeper/dataLog clientPort2181 initLimit5 syncLimit2 server.1server1:2888:3888 server.2server2:2888:3888 server.3server3:2888:3888 •tickTime&#…

ionic2开发的仿外卖点餐系统(Ionic2+Angular2

github上的项目源码 Run this Project(运行该项目) first(首先): make sure your computer install ionic 确保你的电脑安装了ionic2,不懂自行百度 second(其次):$ ionic start wechat_restaurant tutorial…

node搭建服务器,写接口,调接口,跨域

刚开始学node,今天做这个也是累死宝宝了,以后可以自己写接口自己用了,再也不用麻烦人家后台人员了,这些年我们欠他们的太多了,说多了都是泪,不多说,往下看吧。。。 服务端项目目录下&#xff1a…

ThreadPoolExcutor 线程池 异常处理 (上篇)

前言 最近看到crossoverJie的一篇文章:一个线程罢工的诡异事件 首先感谢原作者的分享,自己获益匪浅。然后是回想到自己的一次面试经历,面试官提问了线程池中的线程出现了异常该怎样捕获?会导致什么样的问题? 示例代码 …

ionic3 调用本地相册并上传图片

前言在APP中启动相册选择器或者拍照上传图片这些功能是非常常见的。对于Ionic2,我们只能通过cordova插件实现调用原生的功能。下面将简单的封装一个选择相册或拍照上传图片的ImgService服务。具体如下。 Cordova准备下载安装所需的Cordovar插件: Image P…