Keycloak:从自定义端点(SPI)发送AdminEvent

问题描述 投票:0回答:1

我有一个Keycloak扩展名(自定义端点,SPI)。现在,我想添加AdminEvents的发送,该实现如下:

    private void logAdminEvent(ClientConnection clientConnection, UserRepresentation rep, OperationType operation, ResourceType resource) {
    RealmModel realm = session.getContext().getRealm();
    // beware: clientConnection must not be null because of missing check for NullPointer in Keycloak
    ClientModel client = realm.getClientByClientId(ROLE_ATTRIBUTE_CLIENT);
    AdminAuth adminAuth = new AdminAuth(realm, authResult.getToken(), authResult.getUser(), client);
    AdminEventBuilder adminEvent = new AdminEventBuilder(realm, adminAuth, session, clientConnection);
    adminEvent
            .operation(operation)
            .resource(resource)
            .authIpAddress(authResult.getSession().getIpAddress())
            .authClient(client)
            .resourcePath(session.getContext().getUri())
            .representation(rep);

    adminEvent
            .success();
}

我知道必须在Keycloak管理控制台中激活管理员事件日志记录。

也许与已登录的用户没有管理特权有关,但是当我授予管理员特权时,它也无效。

我需要想法或提示来解决我在这里做错的事情。不幸的是,文档和网络研究无济于事。

java keycloak
1个回答
0
投票

看看Keycloak的来源,尤其是类似RootAdminResource的来源。据我所记得,所有管理资源(例如控制器)都是通过从生成器克隆的生成器创建事件的,而生成器是由父资源通过构造器注入的。您可能缺少一些初始化技巧。

© www.soinside.com 2019 - 2024. All rights reserved.