Я могу реализовать функцию аутентификации, используя 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
Я не знаю, как решить проблему одновременного входа в систему. Любая помощь приветствуется.
Спасибо