【发布时间】: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 页面并且即使在注销后仍然可以通过身份验证!!!
我相信我需要通过将myapp 的web.xml 作为instructed here 来实现SingleSignOutFilter。
我需要知道的:
- 在
web.xml中配置SingleSignOutFilter是否会完成我的单点注销实现,还是我需要做更多配置? - 实施单点注销后,是否会出现我上面描述的预期行为?意思是,如果我访问
/logout链接,那么每当我尝试访问经过身份验证的 URL 时,它应该将我重定向回/login页面? - 如何判断我使用的是哪种协议(CAS 2.0 或 SAML 1.1)?我应该使用任何默认的 CAS 4.0.0,因为我没有覆盖我的项目中的任何内容。
-
JSESSIONID和CASTGC有什么区别?服务器如何处理/使用它们? - 我是否需要在
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