2016-05-05 7 views
1

Ich habe eine laufende Java EE-Anwendung und jetzt möchte ich Keycloak als Authentifizierungsserver integrieren. Die einzige Sache, die ich Probleme habe, ist der Benutzerspeicher. Ich möchte alle Benutzerdaten in meiner Java-Anwendung haben.Keycloak Provider und Benutzerspeicher

Das Problem jetzt: Wenn der Benutzer auf dem Schlüsselcloak-Frontend registriert, weiß meine Java-Anwendung nicht, dass der Benutzer registriert ist, so dass ich keine neue Entität erstellen kann. Ich habe herausgefunden, dass keycloak einige benutzerdefinierte Module laden kann (https://keycloak.github.io/docs/userguide/keycloak-server/html/providers.html), aber ich habe keine Beispiele gefunden.

Gibt es eine Lösung, wo keycloak meine Java-Anwendung benachrichtigt, wenn der Benutzer registriert?

Antwort

0

Ich hatte das gleiche Problem und ich habe es mit einem Filter gelöst. Ich prüfe nur, wenn der Auftraggeber vorhanden sind, und wenn ich nicht fügen Sie ihn in meine Anwendung DB:

KeycloakSecurityContext ctx = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName()); User userEntity = em.find(User.class, ctx.getToken().getSubject()); if (userEntity == null) { ....create user... } Sie können auch einen Ereignis-Listener verwenden (keycloak events listener), wie in Example Event Listener that prints events to System.out gezeigt, aber für diesen genauen Anwendungsfall die Lösung einfacher und schneller.

+0

Ich tat genau das Gleiche. Leider muss ich immer noch den Rest Admin API verwenden, um die Benutzerrollen zu aktualisieren. – perotom

+0

Es ist möglich, einige Rollen automatisch zu verwenden. Allerdings sehe ich kein Problem in der Verwendung der Admin API. Ich brauche es auch für System- und Leistungstests – alacambra

+0

Wann wird diese Filtermethode aufgerufen? –

Verwandte Themen