Keycloak 提供者和用户存储

Keycloak provider and user storage

我有一个 运行 java ee 应用程序,现在我想集成 keycloak 作为身份验证服务器。我唯一遇到的麻烦是用户存储。我想在我的 java 应用程序中拥有所有用户数据。

现在的问题: 如果用户在 keycloak 前端注册,我的 java 应用程序不知道用户已经注册,所以我无法创建新实体。我发现 keycloak 能够加载一些自定义模块 (https://keycloak.github.io/docs/userguide/keycloak-server/html/providers.html),但我还没有找到任何示例。

是否有任何解决方案可以让 keycloak 在用户注册时通知我的 java 应用程序?

我遇到了同样的问题,我已经使用过滤器解决了它。我只是检查主体是否存在,如果不存在,我将其插入到我的应用程序数据库中:

KeycloakSecurityContext ctx = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName()); User userEntity = em.find(User.class, ctx.getToken().getSubject()); if (userEntity == null) { ....create user... } 您还可以使用事件侦听器(keycloak events listener) as shown in Example Event Listener that prints events to System.out,但对于这个确切的用例,该解决方案更简单、更快捷。

您必须实施自定义身份验证 SPI(在您在应用程序上创建用户的 success() 方法中)、部署它并将其添加到注册流程

Keycloak 文档:Link