我是LDAP + Liferay + OpenAM世界的新手,所以我想知道是否有人可以指出我遇到的问题是正确的方向。在现实生活环境中,有2个LDAP服务器,一个OpenAM服务器和一个Liferay应用程序。客户需要的是在Liferay中针对OpenAM对用户进行身份验证,OpenAM应该使用LDAP服务器。问题是,用户只存在于其中一个LDAP服务器中(它将在未来的某个点上从一个移动到另一个)。客户想要的是:
正如我所说,我是这个世界的新手所以,如果答案太复杂(我担心这对我来说),也许你可以指出我可以解决的书籍或文档这种情况。
由于
答案 0 :(得分:1)
您应该将LifeRay配置为使用OpenAM进行所有身份验证,并且您可以将OpenAM配置为使用两个LDAP服务器(使用不同的域)。 OpenAM配置的详细信息将在OpenAM文档中。
答案 1 :(得分:0)
如前面的答案所述,您应该将所有身份验证请求路由到OpenAM服务器,并让它根据正确的LDAP服务器验证凭据。使用两个不同的域(每个LDAP服务器一个)不会在您的情况下工作,因为这将要求LifeRay知道在哪里找到用户。此外,会话链接到特定领域。
您的问题有多种解决方案。这里只是一对:
如果您可以控制身份验证流程。也就是说,如果您的应用程序使用自定义UI并通过REST与OpenAM通信,您可以在单个域下创建两个不同的身份验证模块实例(让我们说两个DataStore身份验证模块的实例)每个实例指向不同的LDAP服务器。
让我们调用此模块实例DataStore1和DataStore2。您的应用程序可以收集用户凭据(用户名和密码)并将其提交给DataStore1。如果身份验证成功,则用户已经登录。如果失败,应用程序可以尝试使用DataStore2。
当然这并不理想,因为您每次登录时只会发出两个身份验证请求,而不只是一个。
更好的选择(虽然实现起来更复杂)是创建自定义身份验证模块。此模块可以尝试针对LDAP服务器1对用户进行身份验证,然后在第一次身份验证失败时尝试使用LDAP Server 2。请注意,使用此选项,您不需要在应用程序端使用自定义逻辑,因为它只会向OpenAM服务器发送单个身份验证请求。实际上,您可以使用OpenAM策略代理保护您的应用程序。
这种方法相对于选项1的另一个优点是,您可以在幕后迁移用户,假设最终目标是将用户从LDAP服务器1迁移到LDAP服务器2.如果第一次身份验证成功,您的自定义代码可以读取用户从LDAP服务器1输入并将其复制到LDAP服务器2。
希望这可以帮助您解决问题。