OpenAM + 两个 LDAP 服务器

OpenAM + two LDAP servers

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

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

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

谢谢

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

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

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

选项 1

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

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

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

选项 2

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

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

希望能帮到您解决问题。