【问题标题】:OpenAM + two LDAP serversOpenAM + 两个 LDAP 服务器
【发布时间】:2016-11-10 04:59:03
【问题描述】:

我是 LDAP + Liferay + OpenAM 领域的新手,所以我想知道是否有人能在我遇到的问题中指出正确的方向。在现实生活环境中,有 2 个 LDAP 服务器,一个 OpenAM 服务器和一个 Liferay 应用程序。客户需要的是针对 OpenAM 对 Liferay 中的用户进行身份验证,而 OpenAM 应该使用 LDAP 服务器。问题是,用户只存在于其中一个 LDAP 服务器中(将来某个时间点会从一个服务器移动到另一个服务器)。客户想要的是:

  1. 用户必须能够独立于 LDAP 包含的用户进行身份验证。
  2. 获得的令牌必须对两个 LDAP 服务器都有效,因为它将用于不同的服务(我无法控制它),仅针对其中一个服务器来验证身份验证。

正如我所说,我是这个世界的新手,所以,如果答案太复杂(恐怕对我来说),也许你可以向我指出可以解决这种情况的书籍或文档。

谢谢

【问题讨论】:

    标签: ldap liferay openam


    【解决方案1】:

    您应该将 LifeRay 配置为使用 OpenAM 进行所有身份验证,并且您可以将 OpenAM 配置为使用两个 LDAP 服务器(使用不同的领域)。 OpenAM 配置的详细信息将在 OpenAM 文档中。

    【讨论】:

      【解决方案2】:

      正如前面的答案所述,您应该将所有身份验证请求路由到 OpenAM 服务器,并让它针对正确的 LDAP 服务器验证凭据。使用两个不同的领域(一个用于每个 LDAP 服务器)在您的情况下不起作用,因为这需要 LifeRay 事先知道在哪里可以找到用户。此外,会话与特定领域相关联。

      您的问题有多种解决方案。这里只是一对:

      选项 1

      如果您可以控制身份验证流程。也就是说,如果您的应用程序使用自定义 UI 并通过 REST 与 OpenAM 通信,您可以在单个领域下创建两个不同的身份验证模块实例(假设 DataStore 身份验证模块的两个实例),每个实例指向不同的 LDAP 服务器。

      我们称这个模块实例为 DataStore1 和 DataStore2。您的应用程序可以收集用户凭据(用户名和密码)并将它们提交到 DataStore1。如果身份验证成功,则用户已经登录。如果失败,应用程序可以尝试使用 DataStore2。

      当然这并不理想,因为您每次登录都会发出两个身份验证请求,而不是一个。

      选项 2

      一个更好的选择(虽然实现起来更复杂)是创建一个自定义身份验证模块。此模块可以尝试针对 LDAP 服务器 1 对用户进行身份验证,然后在第一次身份验证失败时尝试使用 LDAP 服务器 2。请注意,使用此选项,您不需要应用程序端的自定义逻辑,因为它只会向 OpenAM 服务器发送一个身份验证请求。事实上,您可以使用 OpenAM 策略代理来保护您的应用程序。

      与选项 1 相比,此方法的另一个优点是您可以在后台迁移用户,假设最终目标是将用户从 LDAP 服务器 1 迁移到 LDAP 服务器 2。如果第一次身份验证成功,您的自定义代码可以读取来自 LDAP 服务器 1 的用户条目并将其复制到 LDAP 服务器 2。

      希望这可以帮助您解决问题。

      【讨论】:

      • 优秀的答案。非常感谢。我将尝试这些替代方案并发布我的配置经验:)
      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 2020-02-14
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多