有人可以分享一些如何从Liferay中完全删除用户身份验证和授权的想法吗?背后的想法是移动所有用户管理并将此责任交给其他一些身份提供商,例如Keycloak。我目前正在努力了解Liferay如何根据其数据库对用户进行身份验证。
我有一个扩展Action类的类和在登录公式中点击提交按钮时遇到的run方法
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();
如何制作整个机制,它将重定向到永久提供者(Keycloak或WSO2)并让用户在那里输入用户名和密码,只有在成功的情况下才能捕获JWT令牌并允许用户登录我的门户网站? / p>
任何想法都非常受欢迎。
答案 0 :(得分:1)
去年我用Life {7}和Keycloak用Open ID Connect
协议实现了这个功能。该方法使用记录的Liferay 7插件点。
实际上扩展抽象类
它拦截对Liferay的所有请求并重定向以登录到IdP(即Keycloak),然后通过针对Keycloak(反向通道调用)验证它来处理传入的访问令牌。对于有效的访问令牌,它通过从访问令牌中提取用户的数据,将经过身份验证的用户的数据导入(或更新)到Liferay的数据库中。这还包括角色和组织协会!
另一个挑战是令牌刷新(这也使Keycloak会话保持活动状态)并支持参与全局注销(GLO)。因此,Liferay端的另一个过滤器是必需的,它可识别特殊的Keycloak注销请求并终止相应的Liferay会话。
此外,从Liferay内部使用REST客户端(需要调用Keycloak API)可能会非常棘手。用于JAX-RS客户端的OSGi捆绑是不完整的,并且由于类加载器问题只能由自定义ClientBuilder工厂修复。但如果你在没有JAX-RS的情况下直接使用Jersey或RestEasy,它可能不会那么痛苦。
说实话。以专业,稳定和安全的方式实施所有这些需要几个月的时间。特别是如果您必须在Liferay代码中进行大量研究。它的这种工作文件是不够的 github上有两个开源项目正在解决这个问题。
然而,oxRay似乎不再被维护,它不支持Liferay 7(需要OSGi)。
另一个在去年年初仍然太不成熟,但现在可能已经有所改善。