Skip to content

Commit 2e913d2

Browse files
committed
Merge branch '6.5.x'
2 parents c8b843c + dab989d commit 2e913d2

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/DPoPAuthenticationConfigurer.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.http.HttpHeaders;
3030
import org.springframework.http.HttpStatus;
3131
import org.springframework.security.authentication.AuthenticationManager;
32+
import org.springframework.security.authentication.AuthenticationManagerResolver;
3233
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
3334
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
3435
import org.springframework.security.core.Authentication;
@@ -51,6 +52,9 @@
5152
import org.springframework.security.web.util.matcher.RequestMatcher;
5253
import org.springframework.util.CollectionUtils;
5354
import org.springframework.util.StringUtils;
55+
import org.springframework.web.context.request.RequestAttributes;
56+
import org.springframework.web.context.request.RequestContextHolder;
57+
import org.springframework.web.context.request.ServletRequestAttributes;
5458

5559
/**
5660
* An {@link AbstractHttpConfigurer} for OAuth 2.0 Demonstrating Proof of Possession
@@ -76,7 +80,7 @@ final class DPoPAuthenticationConfigurer<B extends HttpSecurityBuilder<B>>
7680
@Override
7781
public void configure(B http) {
7882
AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class);
79-
http.authenticationProvider(new DPoPAuthenticationProvider(authenticationManager));
83+
http.authenticationProvider(new DPoPAuthenticationProvider(getTokenAuthenticationManager(http)));
8084
AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager,
8185
getAuthenticationConverter());
8286
authenticationFilter.setRequestMatcher(getRequestMatcher());
@@ -87,6 +91,23 @@ public void configure(B http) {
8791
http.addFilter(authenticationFilter);
8892
}
8993

94+
private AuthenticationManager getTokenAuthenticationManager(B http) {
95+
OAuth2ResourceServerConfigurer<B> resourceServerConfigurer = http
96+
.getConfigurer(OAuth2ResourceServerConfigurer.class);
97+
final AuthenticationManagerResolver<HttpServletRequest> authenticationManagerResolver = resourceServerConfigurer
98+
.getAuthenticationManagerResolver();
99+
if (authenticationManagerResolver == null) {
100+
return resourceServerConfigurer.getAuthenticationManager(http);
101+
}
102+
return (authentication) -> {
103+
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
104+
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
105+
AuthenticationManager authenticationManager = authenticationManagerResolver
106+
.resolve(servletRequestAttributes.getRequest());
107+
return authenticationManager.authenticate(authentication);
108+
};
109+
}
110+
90111
private RequestMatcher getRequestMatcher() {
91112
if (this.requestMatcher == null) {
92113
this.requestMatcher = new DPoPRequestMatcher();

config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,10 @@ AuthenticationManager getAuthenticationManager(H http) {
376376
return http.getSharedObject(AuthenticationManager.class);
377377
}
378378

379+
AuthenticationManagerResolver<HttpServletRequest> getAuthenticationManagerResolver() {
380+
return this.authenticationManagerResolver;
381+
}
382+
379383
AuthenticationConverter getAuthenticationConverter() {
380384
if (this.authenticationConverter != null) {
381385
return this.authenticationConverter;

config/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/resource/OAuth2ResourceServerConfigurerTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
8989
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
9090
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
91+
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
9192
import org.springframework.security.config.http.SessionCreationPolicy;
9293
import org.springframework.security.config.test.SpringTestContext;
9394
import org.springframework.security.config.test.SpringTestContextExtension;
@@ -2605,7 +2606,9 @@ SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
26052606
// @formatter:off
26062607
http
26072608
.oauth2ResourceServer()
2608-
.authenticationManagerResolver(authenticationManagerResolver);
2609+
.authenticationManagerResolver(authenticationManagerResolver)
2610+
.and()
2611+
.anonymous(AbstractHttpConfigurer::disable);
26092612
return http.build();
26102613
// @formatter:on
26112614
}

0 commit comments

Comments
 (0)