Keycloak提供商和用户存储

时间:2016-05-05 14:46:09

标签: security java-ee wildfly keycloak

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

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

有没有解决方案,当用户注册时,keycloak会通知我的java应用程序?

2 个答案:

答案 0 :(得分:1)

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

Keycloak文档:Link

答案 1 :(得分:0)

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

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),如Example Event Listener that prints events to System.out所示,但对于这个确切的用例,解决方案更容易,更快。