【发布时间】:2020-07-07 22:28:09
【问题描述】:
我使用 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 中)。
【问题讨论】:
标签: java session single-sign-on cas