У моего приложения была форма входа в систему, и теперь я хочу интегрировать свою учетную запись freeIPA с помощью Keycloak.
У меня есть 2 WebSecurityConfigurerAdapter
ниже
SecurityConfiguration.java
@Configuration
@EnableWebSecurity
@Order(1)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private final AccountDetailsService accountDetailsService;
private static final String[] IGNORED_RESOURCE_LIST = new String[]{
"/resources/**",
"/static/**",
"/webjars/**",
"/plugins/**",
"/imgs/**",
"/fonts/**",
"/vendors/**",
"/flags/**",
"/js/**",
"/sso/login",
"/css/**"};
private static final String[] PERMIT_ALL_RESOURCE_LIST = new String[]{
"/actuator/health/**",
"/login/**",
"/json/**",
"/auth/**",
"/error/**"};
@Autowired
public SecurityConfiguration(AccountDetailsService accountDetailsService) {
this.accountDetailsService = accountDetailsService;
}
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers(IGNORED_RESOURCE_LIST);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(authenticationProvider());
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authProvider
= new DaoAuthenticationProvider();
authProvider.setUserDetailsService(accountDetailsService);
authProvider.setPasswordEncoder(encoder());
return authProvider;
}
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers(PERMIT_ALL_RESOURCE_LIST).permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/auth/login").failureUrl("/auth/login?message=error").permitAll()
.and().logout().permitAll();
http.sessionManagement().maximumSessions(1).sessionRegistry(sessionRegistry()).expiredUrl("/auth/login");
}
}
и KeycloakSecurityConfig.java
@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
@Order(2)
public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(
AuthenticationManagerBuilder auth) throws Exception {
KeycloakAuthenticationProvider keycloakAuthenticationProvider
= keycloakAuthenticationProvider();
keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(
new SimpleAuthorityMapper());
auth.authenticationProvider(keycloakAuthenticationProvider);
}
@Bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(
new SessionRegistryImpl());
}
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests().anyRequest().authenticated();
}
}
А со страницы входа в систему у меня появилась кнопка Войти с Keycloak.Он перенаправляет на страницу входа Keycloak, используя url /sso/login
, но после входа в систему меня перенаправляют обратно на страницу входа в приложение.
Может кто-нибудь подсказать мне этот случай.Как я могу реализовать форму входа и SSO в моем приложении?
Заранее спасибо.Любая помощь будет оценена.