OpenAM +两个LDAP服务器

时间:2016-07-07 18:30:39

标签: ldap liferay openam

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

  1. 用户必须能够独立于LDAP包含用户的身份进行身份验证。
  2. 获取的令牌必须对两个LDAP服务器都有效,因为它将在另一个服务中使用(我无法控制它),只针对其中一个验证身份验证。
  3. 正如我所说,我是这个世界的新手所以,如果答案太复杂(我担心这对我来说),也许你可以指出我可以解决的书籍或文档这种情况。

    由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

选项1

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

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

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

选项2

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

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

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