【问题标题】:How do I SLO from a cookieless application in PingFederate如何从 PingFederate 中的无 cookie 应用程序进行 SLO
【发布时间】:2012-01-05 21:18:53
【问题描述】:

我正在尝试使用 PingFederate 进行 SLO。其中一个 SP 应用程序配置为使用无 cookie 会话。 PingFederate 中的这个 SP 应用程序的注销 URL 设置为例如“http://site/logout.aspx”,但是当 SLO 进程被触发时,PingFederate 成功地将浏览器重定向到这个 URL,但是到一个完全不同的会话比第一次创建 SSO 时产生的那个。如何配置 PingFederate 以重用 SSO 进程中创建的会话重定向到 SP 的注销页面?

编辑:对不起,我忘了提一些事情。实际上 IdP 和 SP 应用程序都是在 ASP.NET 中开发的,我所说的 cookieless 是指 SP 应用程序在其 web.config 文件中具有以下会话状态配置

    <sessionState mode="InProc" cookieless="UseUri" regenerateExpiredSessionId="true" timeout="60" stateNetworkTimeout="30" />

此 sessionState 配置使 url 看起来像 'http://site(S(pvvofbemnrmaixo2emaaeo0t))/Home.aspx',这对于 SSO 来说是可以的,因为当 'http://site/Home.aspx' 是调用时,会创建一个新会话,因此将 url 替换为包含“(S(blahblah))”,但是,当 SLO 进程调用 SP 的注销 url (http://site/logout.aspx) 时,一个新的为 SP 站点生成会话(与 SSO 最初创建的会话不同)。因此,原始 SP 站点会话并未结束。

【问题讨论】:

  • 请格式化您的代码部分。

标签: asp.net session-state cookieless pingfederate


【解决方案1】:

当您说“配置为使用无 cookie 会话”时,您的意思是应用程序本身不使用 cookie 来维护状态吗?如果是这种情况,如何通过 URL 重写来维护会话?

我假设您通过 Ping Identity 集成工具包(例如:Open Token 集成)登录应用程序。在 Java 集成工具包(例如)中,提供了以下示例代码,用于在 SP 集成应用程序中执行 SLO:

request.getSession().invalidate();
String returnUrl = “https://<PingFederate DNS>:9031” + request.getParameter(“resume”);
response.sendRedirect(returnUrl);

这确实依赖于 J2EE 应用程序中的会话管理。如果它是应用程序的新入口点(可能是 SLO,IdP 启动) - 那么您可能需要 cookie 来维护该状态信息。

是否不可能在您的 SP 应用程序集成代码中将一些会话信息存储在 cookie 中,以便您以后可以使其无效?否则实现 SLO 相当棘手。这与其说是一个 PingFederate 问题,不如说是一个关于当用户直接访问应用程序并且他们已经登录时如何在应用程序中维护用户状态的问题。

【讨论】:

  • 对不起,我没有说得很清楚。我只是编辑原始问题以包含更多详细信息..
  • 感谢您的澄清。我最初的建议是有效的。在您的集成代码(用于 SSO)中,您需要以某种方式保存会话状态,以便当请求返回到应用程序中的 SLO 端点时 - 链接中没有通常的会话信息 - 应用程序将能够解决它。同样,我建议最简单的方法是将其粘贴在特殊的 SSO 会话 cookie 中。当 SLO 请求进来时,检查这个 cookie,然后重定向到应用程序注销:site(S(<session-value-read-from-sso-cookie>))/Logout.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多