【问题标题】:CAS SingleSignOutFilterCAS SingleSignOutFilter
【发布时间】:2014-07-26 23:10:52
【问题描述】:

我按照CAS Best Practices 构建了cas.war (v4.0.0) 并将其部署到Tomcat7。当我启动 Tomcat 时,我可以在以下位置访问我的 CAS 登录页面:

https://localhost:8443/cas/login

然后我部署我的一个“客户端”应用程序(一个使用 Shiro 进行身份验证的 Grails Web 应用程序),该应用程序在以下位置上线:

http://localhost:9100/myapp

我转到myapp 的经过身份验证的 URL:

http://localhost:9100/myapp/secret

我已成功重定向到我的 CAS 登录页面(目前,我使用默认的 casLoginView.jsp)。我检查了我的浏览器 cookie,对于 CAS 站点,我有一个 JSESSIONID。我使用 CAS 默认凭据登录(用户名是 casuser;密码是 Melon)并成功重定向到 http://localhost:9100/myapp/secret。巨大的成功!我再次检查我的 cookie,发现我有相同的 JSESSIONID 以及一个新的 CASTGC cookie。

我现在直接进入我的 CAS 注销页面:

https://localhost:8443/cas/logout

我看到“注销成功”消息,并再次检查我的 cookie。 CASTGC cookie 不见了,我仍然有一个 JSESSIONID,但是,它与我得到的第一个 JSESSIONID 不同。

我现在返回经过身份验证的 URL:

http://localhost:9100/myapp/secret

我希望被重定向到 CAS 登录页面:相反,我可以查看 /secret 页面并且即使在注销后仍然可以通过身份验证!!!

相信我需要通过将myappweb.xml 作为instructed here 来实现SingleSignOutFilter

我需要知道的:

  • web.xml 中配置SingleSignOutFilter 是否会完成我的单点注销实现,还是我需要做更多配置?
  • 实施单点注销后,是否会出现我上面描述的预期行为?意思是,如果我访问 /logout 链接,那么每当我尝试访问经过身份验证的 URL 时,它应该将我重定向回 /login 页面?
  • 如何判断我使用的是哪种协议(CAS 2.0 或 SAML 1.1)?我应该使用任何默认的 CAS 4.0.0,因为我没有覆盖我的项目中的任何内容。
  • JSESSIONIDCASTGC 有什么区别?服务器如何处理/使用它们?
  • 我是否需要在cas-servlet.xml 中配置任何内容才能使单点注销工作?如果是这样,是什么?如果不是,这个文件是做什么用的?

【问题讨论】:

  • 您是否尝试过搜索其他答案?关于这个确切的主题大约有十几个问题。
  • 感谢@EngineerDollery (+1) - 但是我能找到的唯一问题与单点登录 out 相关(不是登录 in!)是this one,这是由于用户使用IP地址而不是CAS服务器的完全限定域名造成的。
  • 我还应该提到,无论我是在本地运行 CAS (localhost) 还是将其部署到我们的 DEV 环境(dev.mycas.example.com 等),都会发生这种情况。
  • 请注意,这也发生在 CAS 3.5.2.1(最新/稳定版本)中。

标签: java cookies single-sign-on cas jsessionid


【解决方案1】:

我需要知道的:

  • 将在web.xml 中配置SingleSignOutFilter 完成我的 单点注销的实现,或者我是否有更多配置 需要做什么?

是的,当然。但是为了避免泄漏资源,您应该遵循指南并将SingleSignOutHttpSessionListener 添加到您的 web.xml。有关客户端的完整设置,请参阅official Java client documentation。不要忘记将 Github 页面切换到您使用的任何 CAS 客户端版本。 (请注意它可能包含拼写错误。)

  • 一旦实施单点注销,它是否具有预期的 我上面描述的行为?意思是,如果我去/logout 链接,然后每当我尝试访问经过身份验证的 URL 时,它应该 将我重定向回/login 页面?

当然,这就是单一注销机制的重点——它会破坏相应客户端应用程序中的所有会话——前提是它们能够处理由/logout 上的 CAS 发出的注销回调。

  • 如何判断我使用的是哪种协议(CAS 2.0 或 SAML 1.1)?一世 应该使用我没有使用的任何默认 CAS 4.0.0 覆盖我项目中的任何内容。

如果您不知道为您的 CAS 或客户端应用程序配置 SAML,那么您肯定会使用 CAS 协议。

  • JSESSIONIDCASTGC 有什么区别?如何 它们由服务器处理/使用不同?

CASTGC cookie 是 CAS 会话标识符的持有者(从技术上讲,会话是由 CAS 以类似 Map 的结构管理的)。这是只有你和 CAS 服务器知道的秘密。 Java 应用程序使用JSESSIONID cookie 来识别您的应用程序会话,正如Java Servlets 规范所定义的那样。具体来说,CAS 主要使用它来跟踪您当前的唱歌过程。

  • 我是否需要在cas-servlet.xml 中配置任何内容才能获得单身 退出工作?如果是这样,是什么?如果不是,这个文件是做什么用的?

不,你没有。但你可能会读到 e。 G。 official Apereo documentation,描述了服务器端 SLO 功能的原则和可能的自定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2012-05-15
    相关资源
    最近更新 更多