mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-07 03:02:23 +00:00
Merge branch '6.5.x'
This commit is contained in:
commit
2e913d2af9
@ -29,6 +29,7 @@ import jakarta.servlet.http.HttpServletResponse;
|
|||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.security.authentication.AuthenticationManager;
|
import org.springframework.security.authentication.AuthenticationManager;
|
||||||
|
import org.springframework.security.authentication.AuthenticationManagerResolver;
|
||||||
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
|
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
|
||||||
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
@ -51,6 +52,9 @@ import org.springframework.security.web.context.RequestAttributeSecurityContextR
|
|||||||
import org.springframework.security.web.util.matcher.RequestMatcher;
|
import org.springframework.security.web.util.matcher.RequestMatcher;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.context.request.RequestAttributes;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An {@link AbstractHttpConfigurer} for OAuth 2.0 Demonstrating Proof of Possession
|
* An {@link AbstractHttpConfigurer} for OAuth 2.0 Demonstrating Proof of Possession
|
||||||
@ -76,7 +80,7 @@ final class DPoPAuthenticationConfigurer<B extends HttpSecurityBuilder<B>>
|
|||||||
@Override
|
@Override
|
||||||
public void configure(B http) {
|
public void configure(B http) {
|
||||||
AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class);
|
AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class);
|
||||||
http.authenticationProvider(new DPoPAuthenticationProvider(authenticationManager));
|
http.authenticationProvider(new DPoPAuthenticationProvider(getTokenAuthenticationManager(http)));
|
||||||
AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager,
|
AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager,
|
||||||
getAuthenticationConverter());
|
getAuthenticationConverter());
|
||||||
authenticationFilter.setRequestMatcher(getRequestMatcher());
|
authenticationFilter.setRequestMatcher(getRequestMatcher());
|
||||||
@ -87,6 +91,23 @@ final class DPoPAuthenticationConfigurer<B extends HttpSecurityBuilder<B>>
|
|||||||
http.addFilter(authenticationFilter);
|
http.addFilter(authenticationFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AuthenticationManager getTokenAuthenticationManager(B http) {
|
||||||
|
OAuth2ResourceServerConfigurer<B> resourceServerConfigurer = http
|
||||||
|
.getConfigurer(OAuth2ResourceServerConfigurer.class);
|
||||||
|
final AuthenticationManagerResolver<HttpServletRequest> authenticationManagerResolver = resourceServerConfigurer
|
||||||
|
.getAuthenticationManagerResolver();
|
||||||
|
if (authenticationManagerResolver == null) {
|
||||||
|
return resourceServerConfigurer.getAuthenticationManager(http);
|
||||||
|
}
|
||||||
|
return (authentication) -> {
|
||||||
|
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
||||||
|
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
|
||||||
|
AuthenticationManager authenticationManager = authenticationManagerResolver
|
||||||
|
.resolve(servletRequestAttributes.getRequest());
|
||||||
|
return authenticationManager.authenticate(authentication);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private RequestMatcher getRequestMatcher() {
|
private RequestMatcher getRequestMatcher() {
|
||||||
if (this.requestMatcher == null) {
|
if (this.requestMatcher == null) {
|
||||||
this.requestMatcher = new DPoPRequestMatcher();
|
this.requestMatcher = new DPoPRequestMatcher();
|
||||||
|
@ -376,6 +376,10 @@ public final class OAuth2ResourceServerConfigurer<H extends HttpSecurityBuilder<
|
|||||||
return http.getSharedObject(AuthenticationManager.class);
|
return http.getSharedObject(AuthenticationManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AuthenticationManagerResolver<HttpServletRequest> getAuthenticationManagerResolver() {
|
||||||
|
return this.authenticationManagerResolver;
|
||||||
|
}
|
||||||
|
|
||||||
AuthenticationConverter getAuthenticationConverter() {
|
AuthenticationConverter getAuthenticationConverter() {
|
||||||
if (this.authenticationConverter != null) {
|
if (this.authenticationConverter != null) {
|
||||||
return this.authenticationConverter;
|
return this.authenticationConverter;
|
||||||
|
@ -88,6 +88,7 @@ import org.springframework.security.config.annotation.method.configuration.Enabl
|
|||||||
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
|
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
||||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||||
import org.springframework.security.config.test.SpringTestContext;
|
import org.springframework.security.config.test.SpringTestContext;
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension;
|
import org.springframework.security.config.test.SpringTestContextExtension;
|
||||||
@ -2605,7 +2606,9 @@ public class OAuth2ResourceServerConfigurerTests {
|
|||||||
// @formatter:off
|
// @formatter:off
|
||||||
http
|
http
|
||||||
.oauth2ResourceServer()
|
.oauth2ResourceServer()
|
||||||
.authenticationManagerResolver(authenticationManagerResolver);
|
.authenticationManagerResolver(authenticationManagerResolver)
|
||||||
|
.and()
|
||||||
|
.anonymous(AbstractHttpConfigurer::disable);
|
||||||
return http.build();
|
return http.build();
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user