【问题标题】:Behaviour of SAML when HTTP Server used for high availability当 HTTP Server 用于高可用性时 SAML 的行为
【发布时间】: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 服务器的断言,这种情况的结果是什么:

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

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

谢谢。

【问题讨论】:

    标签: saml high-availability httpserver spring-saml ibmhttpserver


    【解决方案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 服务器并进行了上面建议的更改,它工作正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多