【问题标题】:How can I logout of a siteminer SSO session from the server when my web session expires当我的网络会话过期时,如何从服务器注销站点挖掘器 SSO 会话
【发布时间】:2014-06-24 15:12:00
【问题描述】:

我们的网络会话需要在 2 小时内超时,而站点管理员 SSO 会话超时大约是 4 小时。无论如何要从我的 web 应用程序向 siteminder 发送请求以注销我的 SSO 会话超时。我尝试的是在用户登录时捕获我的 webapp 会话中的所有 siteminder 参数(基本上任何以 SM_ 开头的东西)。然后在 HttpSessionListener.sessionDestroyed() 方法中,在添加来自会话的所有站点管理器标头后,我向我们的站点管理器 logoff.html url 发送一个请求。这种方法似乎没有发生任何事情 - 下次我访问网页时,会创建一个新的网络会话,并且 siteminder 认为我没有注销。

有什么想法吗?

这是我的代码:

public void sessionDestroyed(HttpSessionEvent sessionEvent)
{
    Map<String, String> siteminderHeaders = (Map<String, String>)sessionEvent.getSession().getAttribute("SM_HEADERS");

    if (siteminderHeaders != null){
        RequestCallback requestCallback = new SiteminderLogoutRequestCallback(siteminderHeaders);

        restTemplate.execute("https://mysiteminderhost/siteminderagent/ssologout/Logout.html", HttpMethod.GET, requestCallback, null);
    }
}

【问题讨论】:

    标签: jakarta-ee spring-mvc session-timeout siteminder


    【解决方案1】:

    因此,如果我理解正确,则用户正在登录 SiteMinder(从而接收 SMSESSION cookie),然后访问受 SM Web Agent 实例保护的应用程序(因为您可以读取 WA 设置的 SM_HEADERS),而您希望在您的应用程序达到其超时(2 小时)而 SM 超时为 4 小时时注销用户?

    既然 SM 会话信息存储在 SMSESSION cookie 中,为什么不让您的代码手动将 SMSESSION cookie 值(set-cookie)设置为“LOGGEDOFF”?或者,如果您只是将浏览器重定向到特定于 SM 的 logout.fcc 页面,则 SM 将处理其余的 IIRC。

    【讨论】:

    • 我原本尝试在会话超时后等待,直到另一个请求进来,打算重定向到SM注销页面。问题是,如果没有会话,我将不知道该请求是在 SSO 登录之后还是只是在会话超时后发生的常规请求。我知道如何区分这些场景,因为 SM 标头是相同的。除非有一个 SM 标头表明这是在登录尝试之后发生的。
    猜你喜欢
    • 2011-11-14
    • 2014-09-12
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2012-01-13
    相关资源
    最近更新 更多