1

我试图了解 Spring Security 如何处理单点注销。我正在使用具有多个 Grails 应用程序的 CAS 服务器。这是我的场景:

应用 #1 和登录

  1. 用户导航到 Grails 应用程序 #1。
  2. 应用 #1 没有用户的身份验证数据,并检查 CAS 服务器。CAS 服务器没有用户的 cookie 数据,因此 CAS 提示用户登录。
  3. 用户登录 CAS 并获得有效票证。用户从第 1 步被重定向回应用程序 #1 URL。
  4. 在身份验证后的第一个请求中,应用程序 #1 将 CAS 票证加载到其 SecurityContextHolder 中。后续请求使用票证数据来验证用户是否已通过身份验证。

应用 #2 和注销

  1. 用户导航到 Grails 应用程序 #2。
  2. 应用 #2 没有用户的身份验证数据,并检查 CAS 服务器。CAS 服务器拥有用户的 cookie 数据,并使用该数据对用户进行身份验证。
  3. 在身份验证后的第一个请求中,应用 #2 将 CAS 票证加载到其 SecurityContextHolder 中。后续请求使用票证数据来验证用户是否已通过身份验证。

登出

  1. 用户通过点击应用#2 的注销页面来注销应用#2。应用 #2 不再将用户数据存储在 SecurityContextHolder 中。
  2. 用户被重定向到 CAS 服务器注销页面。CAS 不再为用户提供有效票证。
  3. 对应用 #2 的后续(受保护)请求会将用户重定向到 CAS 登录页面。
  4. 因为应用 #1 在其 SecurityContextHolder 中仍然有 CAS 票证数据,所以对应用 #1 的后续(受保护)请求不会将用户重定向到登录。上下文必须以某种方式清除或过期。

我应该如何阻止用户访问 app #1 中受保护的 URL?我可以为 SecurityContextHolder 设置到期日期吗?

4

0 回答 0