当 HTTP Server 用于高可用性时 SAML 的行为

Posted

技术标签:

【中文标题】当 HTTP Server 用于高可用性时 SAML 的行为【英文标题】:Behaviour of SAML when HTTP Server used for high availability 【发布时间】:2015-02-03 02:33:16 【问题描述】:

我已经实现了对 SAML SSO 的支持,让我的应用程序使用 Spring Security SAML Extension 作为服务提供者。我能够将我的 SP 与不同的 IDP 集成。例如,我有 HostA、HostB 和 HostC​​strong>,所有这些都有我的应用程序的不同实例。我为每个主机指定了一个 SP 元数据文件,并将 AssertionConsumerServiceURL 设置为该主机的 URL(EX:https:HostA.com/myapp/saml/sso)。 我将每个元数据文件添加到 IDP 并对其进行了测试,一切正常。

不过,我的项目还通过为负载平衡配置 IBM HTTP Server 来支持高可用性。因此在这种情况下,HTTP Server 将配置主机(A、B、C) 作为负载均衡的主机,用户将使用HTTP服务器的URL访问我的应用程序:https:httpserver.com/myapp/

如果我定义了一个 SP 元数据文件并在 AssertionConsumerServiceURL(https://httpserver.com/saml/sso)中指定了 HTTP 服务器的 URL,并更改了我的实现以接受针对我的 HTTP 服务器的断言,这种情况的结果是什么:

    用户访问将用户分派到 HostA 的 HTTPServer(幕后) 我在 HostA 中的 SP 应用程序向 IDP 发送身份验证请求。 IDP 将响应发送回我的 httpserver:https://httpserver.com/saml/sso。

HTTP 服务器是否会重定向到 HostA,使其如下所示:https://HostA.com/saml/sso

谢谢。

【问题讨论】:

【参考方案1】:

当在负载均衡器后面以集群模式部署相同的应用程序实例时,您需要告知后端应用程序有关它们部署在其后面的 HTTP 服务器 (https://httpserver.com/myapp/) 上的公共 URL。您可以使用SAMLContextProviderLB 来执行此操作(在manual 中查看更多信息)。但是您似乎已经成功执行了这一步。

一旦您的 HTTP 服务器收到请求,它会将其转发到您的主机到 URL,例如https://HostA.com/saml/sso 通常还会提供原始 URL 作为 HTTP 标头。 SAMLContextProviderLB 将使 SP 应用程序认为真正的 URL 是 https://httpserver.com/saml/sso,这将使其通过与目标 URL 相关的所有 SAML 安全检查。

由于后端应用程序在其 HttpSession 中存储状态,请确保执行以下操作之一:

在 HTTP 服务器上启用粘性会话(以便相关请求始终定向到同一服务器 确保跨集群复制 HTTP 会话 通过在 Spring 配置中包含 bean EmptyStorageFactory 来禁用对响应 ID 的检查(此选项也会使单点注销不可用)

【讨论】:

谢谢弗拉基米尔。我会尝试这个解决方案,然后将结果回复您。 我安装了 HTTP 服务器并进行了上面建议的更改,它工作正常。谢谢。

以上是关于当 HTTP Server 用于高可用性时 SAML 的行为的主要内容,如果未能解决你的问题,请参考以下文章

Zabbix_server高可用之文件同步

nginxkeepalivedlvsf5可以很好的解决高可用扩展性反向代理+扩展均衡的问题

sql server 高可用故障转移

K3S 离线安装部署高可用集群

高可用(HA)集群

SQL Server复制情况下的高可用方案镜像+复制