EventListenerProvider删除现有的脱机会话/令牌

时间:2018-07-15 20:01:37

标签: keycloak

我需要实施Keycloak EventListenerProvider 的一些建议,以确保每个用户只有一个脱机会话/令牌(用户在另一台设备上登录后,提供商应确保其他会话/令牌被删除)。我们使用Keycloak 3.4.1。

我希望打个电话

userSessionProvider.removeOfflineUserSession(realmModel, userSession);
在下面的代码中

应该足够了...但是它不会删除其中的任何内容 “ OFFLINE_CLIENT_SESSION”和“ OFFLINE_USER_SESSION”表。 我想念什么吗?这甚至可行吗?

@Override
public void onEvent(Event event) {
  String realmId = event.getRealmId();
  String userId = event.getUserId();
  EventType eventType = event.getType();

  RealmModel realmModel = realmProvider.getRealm(realmId);
  UserModel userModel = session.users().getUserById(userId, realmModel);
  UserSessionProvider userSessionProvider = session.sessions();
  List<UserSessionModel> userSessions = 
  userSessionProvider.getOfflineUserSessions(realmModel, userModel);
  userSessions.stream()
    .filter(userSession ->!userSession.getId().equals(event.getSessionId()))
    .forEach(userSession -> {
        // The following line does not do anything within the keycloak database...
        userSessionProvider.removeOfflineUserSession(realmModel, userSession);
    });
}

0 个答案:

没有答案