会话结束后客户端会话cookie过期时,如何在CAS中使用超时凭单过期策略?

时间:2020-03-27 07:35:08

标签: java session single-sign-on cas

我使用CAS Java客户端3.4.1和CAS服务器5.3。

据我了解,成功进行身份验证后,CAS客户端会将数据添加到客户端应用的会话中。现在,对于每个请求,CAS客户端都会在会话中验证此数据,如果正确,则请求流继续(不向CAS服务器发出请求)。但是,如果会话丢失或会话中缺少CAS属性(_const_cas_assertion_),则CAS客户端会向CAS服务器发出请求以验证用户是否已通过身份验证。现在,根据该请求,CAS服务器更新了它是TGT上次使用的时间戳,并且延长了TGT超时。

在我的情况下,会话结束时客户端应用程序的会话cookie(JSESSIONID)过期(例如,浏览器关闭)。但是,当TGT过期时,可以说10个小时内,而用户没有在10个小时内关闭浏览器时,则不会向CAS服务器发出请求,并且TGT的过期时间不会延长。但是,如果用户在5个小时后打开client2应用程序,则会向CAS服务器发出请求,并且TGT到期将延长10个小时。这意味着SLO请求会在15小时后发送到client1应用。

我的问题是,当仅使用client1应用程序时,如果不清除客户端的会话cookie或使客户端再次在CAS服务器中调用身份验证,如何使客户端上次使用时间戳更新TGT?如果要在10个小时内打开(和使用)客户端应用程序且未关闭它,我想更新TGT上次使用的时间戳,那么经过10个小时后就不会向客户端发送SLO请求(因为TGT上次使用是10个小时前)。

换句话说,当客户端在不清除会话的情况下使用应用程序时,如何扩展TGT的使用范围?

清除会话是不可接受的,因为CAS客户端的AuthenticationFilter将启动身份验证,该身份验证会将客户端的浏览器重定向到CAS服务器,并将其重定向回客户端应用程序。它将重定向回到同一页面,但是客户端的视图状态将丢失(例如,在JSF ViewScoped bean中)。

1 个答案:

答案 0 :(得分:0)

我的问题是,当仅使用client1应用程序时,如何在不清除客户端的会话Cookie的情况下使客户端延长TGT超时时间,或者不使客户端再次在CAS服务器中调用身份验证?

您不能。 TGT超时对于CAS部署是全局的。使用单个应用程序以某种方式扩展该超时将干扰并中断其他可能不需要此扩展的其他应用程序的相同策略/超时规则。如果将CAS服务器设置为在10小时超时,则这很困难,会话将在10小时后结束。

作为客户端应用程序,您通常不能随机动态地修改服务器行为。这样会破坏集中化,集中审核,安全性等目的以及其他与同一服务器交互的应用程序的行为。

如果客户端应用在10个小时内打开(使用)并且没有关闭,我想延长TGT的有效期,因此在10个小时之后不会向客户端发送SLO请求。

可能的是,扩展SLO过滤器以在会话仍处于活动状态时不破坏应用程序,或者如果您不想参与SLO则从应用程序配置中删除SLO过滤器...或与CAS服务器管理员联系,并与他们讨论SLO的细微差别。