Skip to content

Commit 4807f5c

Browse files
committed
Prevent StackOverflowException when OpenID cannot validate a token
This is caused by a bug/issue in Spring: spring-projects/spring-security#8369 The solution is to not a define a authenticationManager bean.
1 parent aa71e35 commit 4807f5c

File tree

2 files changed

+5
-13
lines changed

2 files changed

+5
-13
lines changed

src/main/java/eu/openanalytics/containerproxy/auth/impl/KeycloakAuthenticationBackend.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import javax.inject.Inject;
3131
import javax.servlet.ServletException;
3232

33-
import org.keycloak.OAuth2Constants;
3433
import org.keycloak.adapters.AdapterDeploymentContext;
3534
import org.keycloak.adapters.KeycloakConfigResolver;
3635
import org.keycloak.adapters.KeycloakDeployment;
@@ -44,18 +43,19 @@
4443
import org.keycloak.adapters.springsecurity.authentication.KeycloakLogoutHandler;
4544
import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter;
4645
import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter;
47-
import org.keycloak.adapters.springsecurity.filter.QueryParamPresenceRequestMatcher;
4846
import org.keycloak.adapters.springsecurity.management.HttpSessionManager;
4947
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
5048
import org.keycloak.representations.IDToken;
5149
import org.keycloak.representations.adapters.config.AdapterConfig;
5250
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
5351
import org.springframework.context.ApplicationContext;
5452
import org.springframework.context.annotation.Bean;
53+
import org.springframework.context.annotation.Import;
5554
import org.springframework.core.env.Environment;
5655
import org.springframework.security.authentication.AuthenticationManager;
5756
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
5857
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
58+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
5959
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer.AuthorizedUrl;
6060
import org.springframework.security.core.Authentication;
6161
import org.springframework.security.core.AuthenticationException;
@@ -83,7 +83,7 @@ public class KeycloakAuthenticationBackend implements IAuthenticationBackend {
8383
Environment environment;
8484

8585
@Inject
86-
AuthenticationManager authenticationManager;
86+
WebSecurityConfigurerAdapter webSecurityConfigurerAdapter;
8787

8888
@Inject
8989
ApplicationContext ctx;
@@ -135,7 +135,7 @@ protected KeycloakAuthenticationProcessingFilter keycloakAuthenticationProcessin
135135
new RequestHeaderRequestMatcher(KeycloakAuthenticationProcessingFilter.AUTHORIZATION_HEADER)
136136
);
137137

138-
KeycloakAuthenticationProcessingFilter filter = new KeycloakAuthenticationProcessingFilter(authenticationManager, requestMatcher);
138+
KeycloakAuthenticationProcessingFilter filter = new KeycloakAuthenticationProcessingFilter(webSecurityConfigurerAdapter.authenticationManagerBean(), requestMatcher);
139139
filter.setSessionAuthenticationStrategy(sessionAuthenticationStrategy());
140140
// Fix: call afterPropertiesSet manually, because Spring doesn't invoke it for some reason.
141141
filter.setApplicationContext(ctx);

src/main/java/eu/openanalytics/containerproxy/security/WebSecurityConfig.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,16 @@
2929
import org.springframework.context.annotation.Configuration;
3030
import org.springframework.core.env.Environment;
3131
import org.springframework.security.authentication.AuthenticationEventPublisher;
32-
import org.springframework.security.authentication.AuthenticationManager;
3332
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
3433
import org.springframework.security.config.annotation.authentication.configuration.GlobalAuthenticationConfigurerAdapter;
3534
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
36-
import org.springframework.security.config.annotation.web.builders.HttpSecurity.RequestMatcherConfigurer;
3735
import org.springframework.security.config.annotation.web.builders.WebSecurity;
3836
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
3937
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
4038
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
4139
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
4240
import org.springframework.security.web.header.writers.StaticHeadersWriter;
4341
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
44-
import org.springframework.security.web.util.matcher.AnyRequestMatcher;
4542

4643
import eu.openanalytics.containerproxy.auth.IAuthenticationBackend;
4744
import eu.openanalytics.containerproxy.auth.UserLogoutHandler;
@@ -128,7 +125,7 @@ protected void configure(HttpSecurity http) throws Exception {
128125

129126
if (auth.hasAuthorization()) {
130127
http.authorizeRequests().antMatchers(
131-
"/login", "/signin/**",
128+
"/login", "/signin/**", "/auth-error",
132129
"/favicon.ico", "/css/**", "/img/**", "/js/**", "/assets/**", "/webjars/**").permitAll();
133130
http
134131
.formLogin()
@@ -166,9 +163,4 @@ public void init(AuthenticationManagerBuilder amb) throws Exception {
166163
};
167164
}
168165

169-
@Bean(name="authenticationManager")
170-
@Override
171-
public AuthenticationManager authenticationManagerBean() throws Exception {
172-
return super.authenticationManagerBean();
173-
}
174166
}

0 commit comments

Comments
 (0)