当帐户暂时锁定时,我可以在 KeyCloak 中捕获一个事件吗

Eri*_* B. 6 keycloak

我正在使用 KeyCloak 3.4.3.FINAL 并查看是否有任何方法可以捕获帐户临时锁定/解锁的情况。我希望编写一个基于事件类型触发的事件监听器,但我似乎找不到在帐户锁定时触发的任何内容。

Keycloak里有这样的Event吗?如果没有,我可以添加自己的自定义事件吗?我可以捕获 AccountModified 事件并处理该事件,但我看到触发的唯一事件是 LOGIN_ERROR,它不会告诉我该帐户是否被暂时禁用/启用。

Eri*_* B. 4

经过一番研究后,我发现最终有一种通过 LOGIN_ERROR 事件的方法。虽然它充其量只是告诉我用户的帐户是否被暂时锁定,但不会告诉我帐户何时解锁。

临时锁定和解锁不是对帐户定义本身的更改,而是由BruteForceDetector独立管理该信息的类处理。也就是说,只有在向班级明确请求时,您才能确定帐户是否被锁定或解锁。登录后,系统会检查BruteForceDetector用户的帐户是否被暂时锁定。

public void onEvent(Event event) {
    // Ignore excluded events
    if (eevent.getType() == EventType.LOGIN_ERROR) {
        RealmModel realm = session.realms().getRealm(event.getRealmId());
        UserModel user = session.userStorageManager().getUserById(event.getUserId(), realm);
        boolean isTempDisabled = session.getProvider(BruteForceProtector.class).isTemporarilyDisabled(session, realm, user);
        System.out.println("EVENT: " + toString(event) + ", tempDisabled=" + isTempDisabled + ", isEnabled=" + user.isEnabled() );
    }
}
Run Code Online (Sandbox Code Playgroud)