在此博客中,我将讨论如何为KeyCloak构建事件侦听器插件(称为SPI)。
那么,什么是Keycloak ?
Keycloak是RedHat构建的开源身份和访问管理框架。 它提供了许多高级功能,例如SSO,社交身份验证,对多种身份验证协议的支持等。在此处了解更多信息: https : //www.keycloak.org/
但是最重要的功能之一是能够通过简单地构建插件来扩展KeyCloak的任何功能。
在今年夏天的实习期间,我们需要记录KeyCloak中发生的所有用户(和管理员)事件,并将它们发送到外部系统进行分析。 在许多情况下都需要这样做。 (一个示例是,如果您使用外部SIEM记录和分析事件) 。
默认情况下,KeyCloak日志不包含用户/管理员事件。 即使启用了该功能,也很难构建一个外部系统来监视和解析日志以提取所需的事件。 相反,我们可以为KeyCloak构建一个插件以挂接到系统中,并在事件发生时执行“某些操作” (在我们的情况下,触发外部API调用)
因此,让我们建立一个:)
注意 :这里提供了事件侦听器的完整代码。
adwait-thattey / keycloak-event-listener-spi
示例事件侦听器SPI,用于keycloak
我将在这里使用Maven来管理依赖项和构建项目。
因此,让我们首先整理一下pom.xml 。
(如果您不熟悉Maven,我们将在Maven中使用pom.xml文件列出所有项目详细信息,包括所有依赖项)
(如果看不到上述要点,则可以在此处找到该文件
在pom.xml
,我们定义了父级详细信息,项目名称Sample Event Listener
,版本,工件ID(此处为sample_event_listener
),依赖项和构建配置。
下一步是实施SPI。 为此,我们需要实现2个类。 Provider
和ProviderFactory
因此,让我们在src/main/java
创建我们的包。
此处的包名称为com.coderdude.sampleeventlistenerprovider.provider
coderdude
:因为我的开发别名是coderdude:D
sampleeventlistenerprovider
:可以更短一些,但让我们保留
provider
:最后一个提供程序在那里,因为您的提供程序中可能会使用其他模块。
现在,此软件包将包含上面讨论的2个类。
Provider
类包含插件的实际逻辑。 ProviderFactory
是用于初始化ProviderFactory
的包装器。 区别很重要 。
- 仅在启动KeyCloak时初始化
Factory
。 每次需要时,Factory
都会创建一个Provider
的新实例。 (就我们而言,每次事件发生) - 仅存在1个
Factory
实例。 多个提供程序可以同时存在(例如2个事件同时发生)。 - 提供程序完成任务后将被销毁。 只要KeyCloak运行,工厂就存在。
- Factory中的任何错误都将使KeyCloak崩溃。 Provider中的错误只会进入日志,而Keycloak的其余部分将正常运行
因此,让我们从创建提供者开始。
的类的名称将是SampleEventListenerProvider
它实现了EventListenerProvider
接口(该接口由KeyCloak提供)
package com . coderdude . sampleeventlistenerprovider . provider ;
import org.keycloak.events.Event ;
import org.keycloak.events.EventListenerProvider ;
import org.keycloak.events.admin.AdminEvent ;
import java.util.Map ;
public class SampleEventListenerProvider implements EventListenerProvider {