Невозможно остановить параллельный сеанс в Spring Boot (сервер аутентификации Keycloak) - PullRequest
0 голосов
/ 17 мая 2018

Я могу реализовать функцию аутентификации, используя Spring Security и Keycloak (работает как положено). Однако, когда я попытался остановить одновременный вход в систему в конфигурации Spring Security, он не работал. Я попытался также с настройкой keycloak, однако я узнал, что в функциональности / конфигурации сборки нет такого, чтобы остановить одновременный вход в систему.

Spring Boot Keycloak Конфигурация выглядит следующим образом:

SessionRegistry sesionregistry=new SessionRegistryImpl();

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
    keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());

    auth.authenticationProvider(keycloakAuthenticationProvider);

}

@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
    return new RegisterSessionAuthenticationStrategy(sesionregistry);
}

@Bean
public KeycloakConfigResolver KeycloakConfigResolver() {return new KeycloakSpringBootConfigResolver();}

@Override
protected void configure(HttpSecurity http) throws Exception
{
    super.configure(http);

    http
            .authorizeRequests()
            .antMatchers("/login").hasRole("user")
            .antMatchers("/app/*").hasRole("user")
            //.antMatchers("/logout").permitAll()
            .anyRequest().permitAll()
            .and()
            .authorizeRequests()
            .antMatchers("/admin*").hasRole("admin")
            .anyRequest().permitAll()
            .and()
            .logout().logoutUrl("/logout")
            .and()
            .sessionManagement().maximumSessions(1)
            .maxSessionsPreventsLogin(true)

            ; //for maximum 1 session for any user

}

Используя эту конфигурацию, я могу войти, однако одновременный вход не отключен.

Я попытался напечатать основной объект для другого пользователя с разным логином и обнаружил, что: Сессия 1:

org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@ec24d1c4:Principal: c8827230-1916-4026-923c-642be90d0d38; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@7f2460bd; Granted Authorities: ROLE_user, ROLE_uma_authorization

Сессия 2:

org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@87138d52: Principal: c8827230-1916-4026-923c-642be90d0d38; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@1e21cde6; Granted Authorities: ROLE_user, ROLE_uma_authorization

Даже значение хеша для 2-х главных объектов отличается:

Session 1: Printing Principal HAsh Value: -1854104148
Session 2:     Printing Principal HAsh Value: -1904262684

Я не знаю, как решить проблему одновременного входа в систему. Любая помощь приветствуется.

Спасибо

...