CAS5.3X 之配置RememberMe & Cookie Secure属性影响

CAS5 在使用ip时(无ssl证书)登录无效 现象 在CAS5 进行内网部署的时候发现,每次登录都只是当次有效。重新刷新或新开页面访问无效。 推理 这种情况应该是没有Cas-server会话导致的。 查看浏览器Application里的Cookies,只发现sessionId,没有发现TGC,我已知Cas-server使用TGC作为会话ID 在查看login请求的返回,发现设置sessionId里没有,而设置TGC里有Secure参数,查询后... 阅读详情

前言

今儿老大突然说我CAS项目的代码有问题,心态突然很慌,咋滴了又,都运行两年了,现在才出问题?

然后开始了捡起两年前代码的惊叹之路,连连感叹,这我写的啊?
嗯嗯,话不多说。。。

CAS 5.3X 之RememberMe

在前台加入以下代码:

   <section class="form-check" th:if="${rememberMeAuthenticationEnabled}">
   <p>
   <input type="checkbox" name="rememberMe" id="rememberMe" value="true" tabindex="5"/>
       <label for="rememberMe" th:text="#{screen.rememberme.checkbox.title}">Remember Me</label>
   </p>
   </section>

application.properties添加配置:

#记住我
cas.ticket.tgt.rememberMe.enabled=true
cas.ticket.tgt.rememberMe.timeToKillInSeconds=3600

咋一看,代码没问题啊,配置也没问题,流程初始化的配置也没问题的呀。
但测试反应给我的问题是,没有实现记住我的功能,无法在浏览器关闭掉重新访问时跳转到正确的客户端地址。

哎,先分析…

分析实现

大伙都知道,CAS的核心就是其Ticket,及其在Ticket之上的一系列处理操作。CAS的主要票据有TGT、ST、PGT、PGTIOU、PT,其中TGT、ST是CAS1.0(基础模式)协议中就有的票据,PGT、PGTIOU、PT是CAS2.0(代理模式)协议中有的票据。这里主要介绍CAS1.0—基础模式中的几种票据。

  • TGT(Ticket Grangting Ticket)

TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,生成一个TGT对象,放入自己的缓存(Session);同时,CAS生成cookie(叫TGC,个人理解,其实就是TGT的SessionId),写入浏览器。TGT对象的ID就是cookie的值,当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值(SessionId)为key查询缓存中有无TGT(Session),如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。

  • TGC (Ticket-granting cookie)
    上面提到,CAS-Server生成TGT放入自己的Session中,而TGC就是这个Session的唯一标识(SessionId),以Cookie形式放到浏览器端,是CAS Server用来明确用户身份的凭证。(如果你理解Session的存放原理的话就很好理解)

  • ST(ServiceTicket)
    ST是CAS为用户签发的访问某一服务票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。

为了保证ST的安全性:ST 是基于随机生成的,没有规律性。而且,CAS规定 ST 只能存活一定的时间,然后 CAS Server 会让它失效。而且,CAS 协议规定ST只能使用一次,无论 Service Ticket 验证是否成功, CASServer 都会清除服务端缓存中的该 Ticket ,从而可以确保一个 Service Ticket 不被使用两次。

RememberMe 之 TGC

从分析咱们得知,TGC是CAS-Server生成以Cookie形式放到浏览器端的,那么RememberMe这个功能,肯定又与浏览器相关,则就与TGC有关呀。
下面咱们就看一下,用户login请求的响应头 set-cookie中存在TGC属性,但是在浏览器的cookies中并没有TGC的记录。
在这里插入图片描述

思考:是什么导致了TGC没有被写入cookie呢?

我们发现set-cookie中,存在两个属性 Secure 及 HttpOnly

  1. secure属性
    当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
    换句话说,如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务器,用http协议是不发送的。

  2. HttpOnly属性
    如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

对于以上两个属性,
首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,HttpOnly属性的目的是防止程序获取cookie后进行攻击。
其次,GlassFish2.x支持的是servlet2.5,而servlet2.5不支持Session Cookie的"HttpOnly"属性。不过使用Filter做一定的处理可以简单的实现HttpOnly属性。GlashFish3.0(支持servlet3.0)默认开启Session Cookie的HttpOnly属性。
也就是说两个属性,并不能解决cookie在本机出现的信息泄漏的问题(FireFox的插件FireBug能直接看到cookie的相关信息)。

总结

问题原因

基于安全的考虑,CAS Server默认会给TGC的Cookie加上secure选项。而请求协议又是HTTP,最终导致了响应头Cookie中的TGC未被提交到服务端,导致CAS的Remember功能不生效。

解决

将CAS的 TGC secure改为false(会降低CAS的安全性):

application.properties:

cas.tgc.secure=false

哎,解决方案出了之后,终于松了一口气,代码还是棒棒的,都是配置惹的祸。

Web身份认证全解析:从Session、JWT到SSO与安全实践 Web身份认证是解决HTTP无状态协议下用户身份识别问题的核心技术。其核心原理是通过凭证(如Session ID或Token)在客户端与服务器之间建立信任关系,使服务器能够识别请求的发起者。这项技术的价值在于保障用户数据安全、实现跨系统状态管理,并作为防御CSRF、XSS等攻击的基础防线。从经典的Session-Cookie机制到现代无状态的JWT(JSON Web Token),再到实现“一次登录,全网通行”的单点登录(SSO),认证方案随着前后端分离、微服务等架构演进不断升级。在实际应用中,开发者常需结 阅读详情

相关推荐

【Unity学习笔记】事件系统EventSystem

1.EventSystem物体 第一次在Unity中创建UI元素时,总会自动生成一个EventSystem物体,它包含三个组件:Transform、EventSystem、Standalone Input Module。如果我们把它删除了,会发现UI上的事件(比如点击、拖拽)将不会被检测到。没错,它就是用来处理UI相关的事件的。 1.1 EventSystem组件 EventSystem基于输入给物体发送事件,它在整个事件系统中扮演的主要角色是: 1.管理被选中的物体 2.管理正在使用的Input Modu

一白梦人的博客 1万+

SpringBoot整合CAS登录

关于springboot整合cas登录相关内容

Rumor_Liu的博客 3267

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 603

单点登录之CAS原理和实现

1.开源单点登录系统CAS入门1.1 什么是单点登录单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。1.2 什

金玉良缘 11万+

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6972

C语言编写Picard迭代和牛顿迭代法

为了完成学校计算方法的作业,花了两个多星期将所有实验报告编写出来,看到同桌找代码的辛苦,优快云也没有这类代码,我只是一时兴起,想分享我写的代码与大家共飨,有错误还请多多指正,代码都不难,也是为了让优快云帮我保存下,我辛辛苦苦做出来的,倘若能给别人带来一丝一毫的帮助,我都万分荣幸。 1:什么是Picard迭代 先弄一个满足f(x) = 0的函数将其转化为x= 正在上传… 重新上传 取消 ...

mohenxiang的博客 4699

cas5.3服务器端部署入门

安装前置条件:本地电脑已经配置好git maven jdk1.8 1.下载服务器端代码模板并且切换至5.3分支: git clone https://github.com/apereo/cas-overlay-template.git cd cas-overlay-template git checkout -b 5.3 remotes/origin/5.3 2.在该目录下右击鼠标,选择运行git bash here,在命令窗口运行下列命令 ##run命令其实是打包并运行服务,相当于mvn.

flyfelu的博客 3198

手把手教你用ESP32-C3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5534

【SSO】CAS问题-未认证授权的服务

前面的文章中,我们已经启动起CAS服务,并从数据库获取用户和密码登录成功。 下面在客户端集成client后应该跳转到登录界面,结果跳转到如下界面: 这个界面是因为我们的服务不是HTTPS协议的,虽然我们关闭了https的限制,在WEB-INF/classess/application.properties,在最下面添加如下代码: cas.tgc.secure=false cas.serviceR...

2万+

代码复现5——VLMaps

报错“AttributeError: module 'clip' has no attribute 'load'”,运行下述命令解决。运行后接着报错:“ModuleNotFoundError: No module named 'pytorch_lightning'”运行后命令后会弹出一个RGB窗口,可以用键盘上的“W”“A”“D”键控制移动视角的变化,“空格”键开始记录,“q”键停止。并更改相关代码文件,vlmaps/vlmaps/lseg/modules/models/lseg_vit.py。

qq_44100524的博客 603

手把手教你学pcie--性能调优 - 中断机制优化

在PCIe系统开发中,中断机制是主机与设备之间通信的重要组成部分。然而,不当的中断设计可能导致CPU负载过高、延迟增加等问题。本文将详细介绍如何优化PCIe系统的中断机制,提升系统性能和响应速度。传统中断(INTx):通过专用引脚发送中断信号,可能引发冲突且效率较低。消息中断(MSI):通过内存写操作发送中断消息,避免冲突并提高效率。扩展消息中断(MSI-X):基于MSI改进,支持更多独立中断向量,适用于复杂场景。选择合适的中断模式对系统性能至关重要。

MHD0815的博客 286

SpringSecurity原理

SpringSecurity源码原理

onePlus5T的博客 1291

48-OpenCVSharp —-Cv2.MatchTemplate() 函数功能(模板匹配)详解

是 OpenCV 中一个常见且简单的模板匹配算法,适用于目标检测和图像识别中的静态场景。它的优点是易于理解和实现,但在面对旋转、尺度变化、复杂背景或光照变化等挑战时,效果可能大打折扣。在这些情况下,结合多尺度图像、特征匹配算法(如 SIFT、SURF、ORB 等)以及深度学习模型可以显著提高匹配的鲁棒性和精度。模板匹配仍然是一个非常基础但强大的工具,适用于一些简单的图像匹配任务。对于更加复杂和动态的图像识别任务,我们通常会使用其他更加复杂的算法或者深度学习模型来处理。

weixin_45590420的博客 4523

SpringBoot 实现CAS Server统一登录认证

​ CAS(Central Authentication Service)中心授权服务,是一个开源项目,目的在于为Web应用系统提供一种可靠的单点登录。​ 在整个认证的流程中的整个流程大概是:首先由CAS Client(我们的客户端应用)发起请求,CAS Client 会重定向到CAS Server进行登录,CAS Server进行账户校验且多个CAS Client 之间可以共享登录的 session ,。​ 从结构上看,CAS 包含两个部分:和。

LiuCJ_20000的博客 9975

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex&trade;-M4F 内核的信息,请参见《Cortex&trade;-M4F 技术参考手册》。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CAS学习(一) 编译支持REST认证的cas6.2服务端并配置部署测试

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: 【1】开源的企业级单点登录解决方案。 【2】CAS Server 为需要独立部署的 Web 应用。这个CAS框架已经提供 【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。 从结.

文若书生的专栏 2800

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

CAS单点登录开源框架解读(十六)--单点登录服务端TGC校验,导致无法获取到tgt,响应401

单点登录情况下的现象 在单点登录情况,客户端应用接入CAS服务端后,特别是外网环境会经常出现401的问题,要么直接跳转到登录页面,要么就直接响应401。注意此时CAS服务端的TGT并没有超时。只能排查后端的日志信息,开启debug模式看到了如下的后端异常信息: [org.jasig.cas.web.support.TGCCookieRetrievingCookieGenerator] - Inv...

joeljx的专栏 6795

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SSO单点登录(一)创建CAS服务端

背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于运营人员来说,很不方便。于是,就想到是不是可以在一个系统登录,其他系统就不用登录了呢?这就是单点登录要解决的问题。 什么是单点登录? 单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互..

我是混IT圈的 1840

cas5.3.2单点登录-配置记住我(十六)

原文地址,转载请注明出处:&amp;amp;amp;nbsp;https://blog.csdn.net/qq_34021712/article/details/82225800&amp;amp;amp;nbsp;&amp;amp;amp;nbsp; &amp;amp;amp;nbsp;&amp;amp;amp;nbsp;©王赛超&amp;amp;amp;nbsp; 正常情况下,在application.properties中配置开启记住我,在登录页面是会显示记住我的文本框,如下图: 但是由于我们使

这个名字想了很久 6319

利用CAS实现SSO单点登录(简易版)

jdk1.8maven3.6.3tomcat9.0(Tomcat至少要8版本以上)

没头脑的博客 2354

CAS学习6:cas免登录时 iframe 跨域和TGC丢失问题处理

在A应用成功登录后,用iframe嵌入B应用的连接,点击时发生cas的跳转登录获取ticket,若不处理会跨域,解决完跨域会发现TGC没有自动带上,跳转到了cas登录页。配置完注意除了cas要重启,所有应用要全部重启,浏览器要清除缓存方可生效。cas版本:5.3.4。

zhaofuqiangmycomm的博客 402

CAS单点登录原理及改造

假设此时另一个业务系统bussiness.test.com也进入了CAS,在浏览器首次打开bussiness.test.com时,由于当前域名下没有存储token,则也会跳转到CAS中,url为cas.test.com/login?3) CAS校验用户名密码,校验成功,则根据用户信息生成TGT、TGC,并将TGC写入到浏览 器的cookie中,同时根据TGT生成ST,再重定向到mail.test.com?1) TGT: 票据,或称大令牌,在登录成功之后生成,其中包含了用户信息。

u012477420的博客 1941

CAS单点登录(十二)——集群部署

通过前面一系列的文章介绍,关于CAS的基本知识点大致介绍完了,今天讲解一下CAS中集群的部署。我们知道当访问量越来越来多时,我们需要对CAS服务的性能进行提升,而通过集群的方式提高CAS的服务性能是比较直接的。 在部署的服务中,通过使用nginx来实现负载均衡分发到CAS具体的服务上,但是我们知道前端每次访问时是随机访问分配的,所以就会出现session共享问题,同时在不同CAS中的TGT分配的t...

Anumbrella 6254

单点登录CAS实现

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

weixin_46894136的博客 9404

SpringBoot+CAS整合服务端和客户端实现SSO单点登录与登出快速入门上手

SpringBoot+CAS整合服务端和客户端实现SSO单点登录与登出快速入门上手

杨杨吖的博客 1万+

CAS统一登录认证(5): CAS 配置中心

配置中心 一、前言 说到配置中心,不得不说一下微服务了。微服务是一种有别于传统单体架构的一种服务架构,简单理解微服务就是将原有的服务按照一点规则进行拆分,简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这...

oyc的博客 1726

cas5.x 使用http方式

  从官网https://github.com/apereo/cas-overlay-template下载项目后。bulid workspace的过程很慢。我们自行下载war包,并放到项目中。   使用HTTP:   在下载的war包的application.properties中添加: cas.tgc.secure=false cas.serviceRegistry.initFromJs...

ChinaMuZhe的博客 3724
上一篇: CAS5.3X 之配置默认Service实现
下一篇: Linux查看防火墙状态及开启关闭命令
Jeffery Chan
博客等级 码龄10年 24粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值