【问题标题】:CAS logout and cookies eliminationCAS 注销和 cookie 消除
【发布时间】:2012-02-24 17:55:21
【问题描述】:

我刚刚制作了一个 HelloWorld servlet 并在其上实现了 CAS。 我可以毫无问题地登录,CAS 正在我的浏览器中设置 3 个 cookie,即 CASGT,为 /cas 设置 2 个 JSESSIONID 1,为 /helloWorld 设置另一个

问题是,然后我访问https://blah:8443/cas/logout,我看到注销成功屏幕但cookies仍在我的浏览器中,所以我没有被注销,我可以在没有登录的情况下再次进入/helloWorld屏幕出现。

您知道我应该如何让 CAS 删除它在我注销时创建的 cookie 吗?

提前致谢

【问题讨论】:

    标签: java single-sign-on cas jasig


    【解决方案1】:

    CASGT cookie 由 CAS 设置,应由 CAS 取消设置。 CAS 注销过程如下:

    1. 您实际上进入了 CAS 注销页面。该页面应该知道您要从中注销的应用程序。一种方法是从您的应用程序重定向到 CAS 注销页面,提供重定向返回 URL 作为参数。

    2. 您的 cookie 被删除,然后您将通过 POST 请求重定向到您的应用程序。

    3. SingleSignOutFilter 捕获一个特殊参数“logoutRequest”,实际上破坏了它从一开始就持有的票证/会话映射,并使当前会话无效。

    为了调试 CAS,启用TRACE 级别的日志记录。这样,您将知道是否收到了正确的请求或会话是否已失效。

    我也建议你看一下org.jasig.cas.client.session包的代码,很简单。

    【讨论】:

    • 非常感谢您的建议 Infeligo,他们没有解决我的问题,但帮助我发现了问题所在。我遇到的问题是 SSL 配置之一,在 http 上调用了注销屏幕,因此浏览器没有发送 CASGT cookie,因此 CAS 服务器除了显示注销成功的屏幕外什么都不做。
    • 您必须在 CAS 服务器端实现一些自定义代码才能在成功注销后删除您的自定义 cookie
    【解决方案2】:

    您应该查看有关 CAS 单点注销的文档,该文档位于 here。它说:

    单点退出的工作原理:

    其会话管理在 服务器端。然后 CAS 客户端可以访问会话信息以结束 会议。

    单点退出不起作用的地方:

    唯一会话管理由 cookie 组成的客户端/语言。 CAS 无权访问浏览器的 cookie,因此无法访问 终止会话。 (但是,应该关闭浏览器窗口 那个)

    我认为这几乎就是你的情况。基于 Cookie 的 SSout 是不可能的,但如果您可以使用 Spring 之类的框架(就像我们在项目中所做的那样),SSout 很容易配置并且非常方便

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2012-10-01
      • 2012-09-29
      • 1970-01-01
      • 2017-11-07
      • 2015-05-07
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多