当帐户暂时被锁定时,是否有可以在KeyCloak中捕获的事件

时间:2018-04-10 21:55:20

标签: keycloak

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

Keycloak中有这样的活动吗?如果没有,有没有办法可以添加我自己的自定义事件?我可以捕获一个AccountModified事件并使用它,但我看到的唯一一个事件是LOGIN_ERROR,它不会告诉我该帐户是否被临时禁用/启用。

1 个答案:

答案 0 :(得分:1)

经过一段时间的挖掘后,我发现最后会有一个通过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() );
    }
}