Skip to content

Commit 919280b

Browse files
spoptchevjgrandja
authored andcommitted
Allow ServerOAuth2AuthorizationRequestResolver to be set on oauth2 client configuration
Closes gh-12430
1 parent 0da1dac commit 919280b

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3831,9 +3831,31 @@ public final class OAuth2ClientSpec {
38313831

38323832
private ServerRedirectStrategy authorizationRedirectStrategy;
38333833

3834+
private ServerOAuth2AuthorizationRequestResolver authorizationRequestResolver;
3835+
38343836
private OAuth2ClientSpec() {
38353837
}
38363838

3839+
/**
3840+
* Sets the resolver used for resolving {@link OAuth2AuthorizationRequest}'s.
3841+
* @param authorizationRequestResolver the resolver used for resolving
3842+
* {@link OAuth2AuthorizationRequest}'s
3843+
* @return the {@link OAuth2ClientSpec} for further configuration
3844+
* @since 6.1
3845+
*/
3846+
public OAuth2ClientSpec authorizationRequestResolver(
3847+
ServerOAuth2AuthorizationRequestResolver authorizationRequestResolver) {
3848+
this.authorizationRequestResolver = authorizationRequestResolver;
3849+
return this;
3850+
}
3851+
3852+
private OAuth2AuthorizationRequestRedirectWebFilter getRedirectWebFilter() {
3853+
if (this.authorizationRequestResolver != null) {
3854+
return new OAuth2AuthorizationRequestRedirectWebFilter(this.authorizationRequestResolver);
3855+
}
3856+
return new OAuth2AuthorizationRequestRedirectWebFilter(getClientRegistrationRepository());
3857+
}
3858+
38373859
/**
38383860
* Sets the converter to use
38393861
* @param authenticationConverter the converter to use
@@ -3960,8 +3982,7 @@ protected void configure(ServerHttpSecurity http) {
39603982
codeGrantWebFilter.setRequestCache(http.requestCache.requestCache);
39613983
}
39623984

3963-
OAuth2AuthorizationRequestRedirectWebFilter oauthRedirectFilter = new OAuth2AuthorizationRequestRedirectWebFilter(
3964-
clientRegistrationRepository);
3985+
OAuth2AuthorizationRequestRedirectWebFilter oauthRedirectFilter = getRedirectWebFilter();
39653986
oauthRedirectFilter.setAuthorizationRequestRepository(getAuthorizationRequestRepository());
39663987
oauthRedirectFilter.setAuthorizationRedirectStrategy(getAuthorizationRedirectStrategy());
39673988
if (http.requestCache != null) {

config/src/test/java/org/springframework/security/config/web/server/OAuth2ClientSpecTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
4141
import org.springframework.security.oauth2.client.web.server.ServerAuthorizationRequestRepository;
4242
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
43+
import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizationRequestResolver;
4344
import org.springframework.security.oauth2.core.OAuth2AccessToken;
4445
import org.springframework.security.oauth2.core.TestOAuth2AccessTokens;
4546
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange;
@@ -134,6 +135,7 @@ public void oauth2ClientWhenCustomObjectsThenUsed() {
134135
ReactiveAuthenticationManager manager = config.manager;
135136
ServerAuthorizationRequestRepository<OAuth2AuthorizationRequest> authorizationRequestRepository = config.authorizationRequestRepository;
136137
ServerRequestCache requestCache = config.requestCache;
138+
ServerOAuth2AuthorizationRequestResolver resolver = config.resolver;
137139
OAuth2AuthorizationRequest authorizationRequest = TestOAuth2AuthorizationRequests.request()
138140
.redirectUri("/authorize/oauth2/code/registration-id").build();
139141
OAuth2AuthorizationResponse authorizationResponse = TestOAuth2AuthorizationResponses.success()
@@ -145,6 +147,7 @@ public void oauth2ClientWhenCustomObjectsThenUsed() {
145147
this.registration, authorizationExchange, accessToken);
146148
given(authorizationRequestRepository.loadAuthorizationRequest(any()))
147149
.willReturn(Mono.just(authorizationRequest));
150+
given(resolver.resolve(any())).willReturn(Mono.empty());
148151
given(converter.convert(any())).willReturn(Mono.just(new TestingAuthenticationToken("a", "b", "c")));
149152
given(manager.authenticate(any())).willReturn(Mono.just(result));
150153
given(requestCache.getRedirectUri(any())).willReturn(Mono.just(URI.create("/saved-request")));
@@ -162,6 +165,7 @@ public void oauth2ClientWhenCustomObjectsThenUsed() {
162165
verify(converter).convert(any());
163166
verify(manager).authenticate(any());
164167
verify(requestCache).getRedirectUri(any());
168+
verify(resolver).resolve(any());
165169
}
166170

167171
@Test
@@ -266,6 +270,8 @@ static class OAuth2ClientCustomConfig {
266270

267271
ServerRequestCache requestCache = mock(ServerRequestCache.class);
268272

273+
ServerOAuth2AuthorizationRequestResolver resolver = mock(ServerOAuth2AuthorizationRequestResolver.class);
274+
269275
@Bean
270276
SecurityWebFilterChain springSecurityFilter(ServerHttpSecurity http) {
271277
// @formatter:off
@@ -274,6 +280,7 @@ SecurityWebFilterChain springSecurityFilter(ServerHttpSecurity http) {
274280
.authenticationConverter(this.authenticationConverter)
275281
.authenticationManager(this.manager)
276282
.authorizationRequestRepository(this.authorizationRequestRepository)
283+
.authorizationRequestResolver(this.resolver)
277284
.and()
278285
.requestCache((c) -> c.requestCache(this.requestCache));
279286
// @formatter:on

0 commit comments

Comments
 (0)