Java 将用户授权移出Liferay

Java 将用户授权移出Liferay,java,security,liferay,keycloak,Java,Security,Liferay,Keycloak,任何人都可以分享一些如何从Liferay中完全删除用户身份验证和授权的想法吗?背后的想法是将所有的用户管理转移到其他身份提供者身上,例如keydapore。我目前正在努力理解Liferay是如何根据其数据库对用户进行身份验证的 我有一个类,它扩展了Action类和run方法,当单击login formular中的submit按钮时,它会被点击 public class CustomTemplateVarsAction extends Action { @Override public void

任何人都可以分享一些如何从Liferay中完全删除用户身份验证和授权的想法吗?背后的想法是将所有的用户管理转移到其他身份提供者身上,例如keydapore。我目前正在努力理解Liferay是如何根据其数据库对用户进行身份验证的

我有一个类,它扩展了Action类和run方法,当单击login formular中的submit按钮时,它会被点击

public class CustomTemplateVarsAction extends Action { 
@Override
public void run(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ActionException {
    ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    User user = themeDisplay.getUser();
如何使整个机制,这将重定向到永恒的提供者(Key斗篷或WSO2),并让用户键入用户名和密码,只有在成功的情况下捕获JWT令牌,并允许用户登录到我的门户


任何想法都是非常受欢迎的

去年,我使用
openid Connect
协议为Liferay 7和Keyclope实现了这一功能。该方法利用了有案可稽的Liferay 7插件点

  • com.liferay.portal.kernel.security.auto.login.AutoLogin
  • com.liferay.portal.kernel.servlet.LiferayFilter
实际扩展抽象类

  • com.liferay.portal.kernel.security.auto.login.BaseAutoLogin
  • com.liferay.portal.kernel.servlet.BaseFilter
  • com.liferay.portal.kernel.events.Action
它拦截对Liferay的所有请求,并重定向以登录到IdP(即Key斗篷),然后通过对Key斗篷(反向通道呼叫)进行验证来处理传入的访问令牌。对于有效的访问令牌,它通过从访问令牌提取用户的数据,将经过身份验证的用户的数据导入(或更新)Liferay的数据库。这还包括角色和组织关联
另一个挑战是令牌刷新(这也使keydape会话保持活动状态)和支持参与全局注销(GLO)。因此,Liferay端需要另一个过滤器,该过滤器识别特殊的KeyClope注销请求并终止相应的Liferay会话

此外,从Liferay内部使用REST客户端(调用KeyClope API所需的REST客户端)可能很棘手。JAX-RS客户端的OSGi绑定不完整,并且由于类加载器问题,只能由自定义ClientBuilder工厂修复。但是,如果您在没有JAX-RS的情况下直接使用Jersey或RestEasy,可能就不会那么痛苦了

老实说。以专业、稳定和安全的方式实施所有这些需要几个月的时间。特别是如果你需要对Liferay代码进行大量研究的话。其针对此类工作的文件不足。
github上有两个开源项目可以解决这个问题

但是,oxRay似乎不再维护,它不支持Liferay 7(需要OSGi)。

另一个在去年年初还太不成熟,但现在可能已经有所改善。

类似的情况?是的,诸如此类,希望这个插件适用于6.2+,我们只使用6.1版本:(我为liferay 6编写了Gluu插件,我们正在将其升级到7。它很快就会发布。您的权利是,它将身份验证移出liferay,但liferay仍将维护自己的用户数据库,用于所有内部操作。