4

抱歉,如果标题有点不清楚 - 我不完全确定如何表达我正在寻找的内容。

从本质上讲,我发现自己的情况是:

  • 我有几个 (3+) 网络应用程序
  • 每个应用程序驻留在单独的服务器上
  • 用户不能单独访问每个应用程序 - 他们都坐在 Apache 后面,充当反向代理
  • Apache 在另一台服务器上
  • 应用程序不能直接访问反向代理或彼此
  • Web 应用程序都是基于 Java 的,在 Tomcat 或 Glassfish 或类似的东西中运行。
  • 我想在所有应用程序中启用 SSO
  • 如果有 IdP(例如 OpenAM、Shibboleth),我将无法直接从任何 Web 应用程序访问它。*

就我而言,这些都是不可变的要求——我必须在不违反上述任何限制的情况下使 SSO 工作。

鉴于这一切,我认为我无法实现典型的 SSO 设置,因为这需要我能够去SP -> IdP -> SP,但我将无法执行该SP -> IdP步骤 - 我将只能执行该IdP -> SP步骤。

现在,这里有解决方案。我已经看到mod_mellonmod_auth_samlmod_shib,它们都支持 Apache 中的 SAML,并且我知道至少mod_mellon会在 HTTP 请求的标头中通过 SAML 身份验证的结果。所以这基本上解决了我的问题,但我会在一分钟内完成一些事情。

我最终想要的是与此类似的东西,除了 Apache 将执行身份验证并将该身份验证的结果发送到 Web 应用程序。

因此,流程将类似于:

Request -> Not Authenticated -> Redirect to Login Page -> Authenticate (e.g. via LDAP) -> Add results to headers -> Redirect to requested page,都无需离开 Apache。

这与典型的 SSO 提供程序完全相同,除了 Apache 本质上同时充当 IdP 和反向代理,它通过将结果包含在标头中来通知 SP 身份验证成功。使用单独的 IdP可能更简单,但如果可能的话,我想避免开销。

最后,无论我使用 Apache plus IdP,还是使用 Apache作为IdP,我都需要能够保护添加到标头中的内容,例如通过对其进行签名。

不过,请稍等——如果我想签署这些东西,也许我应该只包含一个 SAML 令牌,因为 SAML 标准(和库)会处理这个问题......

那么最后一个问题:是否可以让 Apache 充当 SP,调用 IdP,然后将 SAML 令牌转发到反向代理后面的应用程序?进一步阅读后,似乎ECP, 或“增强的客户端或代理配置文件”可能允许这样做。它不适用于这个用例(它实际上是用于例如 WAP 代理),但它可能允许我做我想做的事。SAML 标准是否允许 SP 以外的其他东西发起登录请求?它确实如此,并且被称为IdP-Initiated SSO. 但是,我相信这个问题的第一部分仍然是相关的。

我真的很感谢任何人的任何建议或评论(甚至“你想做什么?!”评论表示赞赏)。

*我应该注意,虽然在这种情况下,我们可以控制所有难题,但出于安全相关的原因,我们可能需要允许客户的用户通过他们的应用程序登录到我们的应用程序。 SSO 基础架构,但我们无法通过网络访问他们的 IdP。但是,他们的 IdP 可以通过网络访问我们的反向代理。我相信这是对最近的潜在客户的实际要求。

4

0 回答 0