Keycloak - 事件侦听器提供者未触发新领域创建事件

Keycloak - Event Listener provider not firing new realm creation event

我已经实现了自定义事件侦听器提供程序。

除了领域创建事件(新领域创建)之外,我能够接收所有事件。我也想在领域创建期间获得事件。

Keycloak 支持吗?如果没有,还有其他实现此目标的可能性吗?

我使用的是 Keycloak 4.5.0 版。

提前致谢。

在对 keycloak 代码做了一些研究之后,我得出结论,keycloak 默认情况下不提供该事件。

所以我从 keycloak 修改了以下文件,这将有助于捕获 Realm 创建和删除事件。

更改 1(最重要):

文件:

keycloak/services/src/main/java/org/keycloak/services/managers/RealmManager.java

函数:

protected void setupRealmDefaults

在上面的函数中,您应该在领域创建期间将事件侦听器添加到领域。

Set<String> eventListenerSet = new HashSet<>();
eventListenerSet.add("jboss-logging"); //This listener will be there by default
eventListenerSet.add("EVENT_LISTENER_YOU_WANT_TO_RECEIVE_EVENT");
realm.setEventsListeners(eventListenerSet);

变化2:

文件:

keycloak/services/src/main/java/org/keycloak/services/resources/admin/RealmsAdminResource.java

函数:

public Response importRealm

在上面的函数中,在返回响应之前添加以下行

Line 1: Create object for admin event
Line 2: Prepare event to trigger with appropriate event type and representation, in this case Create
AdminEventBuilder adminEvent = new AdminEventBuilder(realm, auth, session, clientConnection); 

adminEvent.operation(OperationType.CREATE).resource(ResourceType.REALM).representation(StripSecretsUtils.strip(rep)).success();

更改 3(仅在需要删除事件时才需要)

文件:

keycloak/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java

函数:

public void deleteRealm

在第一行后添加以下代码

AdminAuth adminAuth = auth.adminAuth();
RealmRepresentation realmRepresentation = new RealmRepresentation();
realmRepresentation.setRealm(realm.getName());
AdminEventBuilder adminEvent = new AdminEventBuilder(realm, adminAuth, session, connection);
adminEvent.operation(OperationType.DELETE).resource(ResourceType.REALM).representation(realmRepresentation).success();