【问题标题】:How to use Timeout Ticket Expiration Policy in CAS while client session cookie expires after session end?当客户端会话 cookie 在会话结束后过期时,如何在 CAS 中使用超时票证过期策略?
【发布时间】: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


    【解决方案1】:

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

    你不能。 TGT 超时对于 CAS 部署是全局性的。让单个应用程序以某种方式扩展该超时将干扰和中断可能不希望此扩展的其他应用程序的相同策略/超时规则。如果 CAS 服务器设置为在 10 小时超时,那么这是一个硬停止,会话将在 10 小时结束。

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

    如果客户端应用程序已打开(并使用)且未在 10 小时内关闭,我想延长 TGT 过期时间,因此在 10 小时后不会向客户端发送 SLO 请求。

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

    【讨论】:

    • 我认为我们谈论的不是同一件事。我更新了我的问题以更清楚。澄清一下:我不想从客户端扩展 TGT 超时本身,我想从客户端更新 TGT 上次使用的时间戳以在 CAS 服务器中使用超时票证过期策略。 SLO 对我来说很好用。如果 TGT 有 10 个小时没有使用,那么它应该注销客户端。但是,如果客户端正在使用应用程序(但没有对 CAS 服务器进行任何调用),那么我希望客户端在最后一个客户端应用程序使用时间戳后最多 10 小时内登录。
    • 感谢您的更新。无论哪种方式,如果您的应用程序没有进行 CAS 调用,作为客户端,您无法以任何方式更新上次用于保持其活动的 TGT。正如我所说,这将影响其他客户端应用程序。如果 CAS 会话在您的应用程序仍处于活动状态时超时,您需要添加代码,以便 SLO 过滤器不会破坏活动的应用程序会话或禁用 SLO。或者,修改 CAS 服务器代码以适应全局任务。
    • 对我来说这似乎有点奇怪,当使用apereo.github.io/cas/5.3.x/installation/… 超时策略时。因为假设超时设置为 10h,client1 使用 TGT 10:00。现在,如果没有其他客户端使用相同的 TGT,那么 client1 将在 20:00 注销。但是如果 client2 使用 TGT 13:00,则 TGT last used 时间戳会更新,并且 client1 和 client2 都将在 23:00 注销。这样client2会影响client1。这是该政策的现状。
    猜你喜欢
    • 2016-06-02
    • 2012-05-23
    • 2013-07-18
    • 2011-11-30
    • 2015-03-31
    • 1970-01-01
    • 2018-10-12
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多