【问题标题】:How to do a logout from SiteMinder session for a Pivotal Cloud Foundry hosted JSP/Servlet application?如何为 Pivotal Cloud Foundry 托管的 JSP/Servlet 应用程序从 SiteMinder 会话注销?
【发布时间】:2021-03-29 07:33:58
【问题描述】:

我有一个基于 JSP/Servlet 的应用程序在 Pivotal Cloud Foundary 上运行并使用 Siteminder 进行身份验证。

我们实现但当前不成功的注销包括

  • request.getSession().invalidate() 的清除
  • 随后清除 cookiesn(request.getCookies 后将所有 cookie 的 MaxAge 设置为 0)
  • 随后在新的弹出窗口中调用站点管理员提供的 /logout url
  • 后跟 window.location 作为 PCF 注销以从 PCF 应用程序注销。

通过上述步骤,注销不成功。但是,如果我执行 Shift+Cntrl+Del 并删除 cookie --> 则注销成功。 所以我想以编程方式使用 Servlet 和 JSP 实现相同的行为。

提前致谢!

【问题讨论】:

  • 当您说“siteminder”时,您是如何与之整合的?您是否使用 Pivotal SSO 磁贴?还是本机 OpenID 连接?还是别的什么?
  • @DanielMikusa 应用程序正在使用 Pivotal SSO 磁贴

标签: java jsp servlets cloud-foundry siteminder


【解决方案1】:

使用 Pivotal SSO Tile,您需要执行两个步骤才能完成这项工作。

首先,您需要使用Layer7 SiteMinder Integration Guide 设置您的计划。

正如那里列出的那样......

单点登录支持服务提供商发起的身份验证流程和单点注销。

这是一个相当复杂的过程,并且对您的提供商而言非常具体。我可以在这里给你的唯一提示是完全像在文档中那样做。破坏东西很容易,因此完全按照所写内容为您提供成功的最佳机会。

一旦您制定了计划,第二部分将发送至create a service instance using the plan & bind that to your app。然后按照integrating your app 的说明进行操作。

需要特别注意的部分,即处理单次注销的部分是documented in the API here

注销端点旨在供应用程序用于将用户从 UAA 会话中注销。如果用户也点击此端点,UAA 只会将用户从 UAA 会话中注销,并且如果配置为这样做,还可以使用 SAML 提供程序执行单点注销。

如果您按照文档创建服务计划,它将被配置为进行单次注销,因此您只需要确保在您的应用中注销用户后调用此端点。

有一个example of how you'd do this for Spring Boot apps here

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
        UriComponents url = UriComponentsBuilder.fromHttpUrl(request.getRequestURL().toString())
                .replacePath("")
                .build();
        UriComponents redirectUrl = UriComponentsBuilder.fromHttpUrl(ssoServiceUrl)
                .path("/logout.do")
                .queryParam("client_id", clientId)
                .queryParam("redirect", url.toString())
                .build();
        response.sendRedirect(redirectUrl.toString());
    }

为了解释,此代码在成功注销后得到invoked by Spring。此处的代码只是创建一个指向 /logout.do 端点的 URL 并向客户端发出重定向。这是上面文档链接中描述的内容。

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多