如何为 Pivotal Cloud Foundry 托管的 JSP/Servlet 应用程序从 SiteMinder 会话注销?

Posted

技术标签:

【中文标题】如何为 Pivotal Cloud Foundry 托管的 JSP/Servlet 应用程序从 SiteMinder 会话注销?【英文标题】:How to do a logout from SiteMinder session for a Pivotal Cloud Foundry hosted JSP/Servlet application? 【发布时间】: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 磁贴 【参考方案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 并向客户端发出重定向。这是上面文档链接中描述的内容。

【讨论】:

以上是关于如何为 Pivotal Cloud Foundry 托管的 JSP/Servlet 应用程序从 SiteMinder 会话注销?的主要内容,如果未能解决你的问题,请参考以下文章

在pivotal cloud foundry上申请账号和部署应用

体验 Pivotal Cloud Foundry

Pivotal Cloud Foundry安全原理解析

在 Pivotal Cloud Foundry 上为 Spring Boot 应用程序外部化 Vault 令牌/后端配置

将Spring-boot Backbone应用程序部署到Pivotal Cloud Foundry中

Spring Boot 微服务在 Pivotal Cloud Foundry 平台上部署时无法通过 Kerberos 身份验证