Skip to content

Commit 3c7aa42

Browse files
committed
DefaultServerOAuth2AuthorizationRequestResolver uses fromUri
Fixes gh-6952
1 parent abe7da6 commit 3c7aa42

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/server/DefaultServerOAuth2AuthorizationRequestResolver.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import org.springframework.http.HttpStatus;
2020
import org.springframework.http.server.reactive.ServerHttpRequest;
21-
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
2221
import org.springframework.security.crypto.keygen.Base64StringKeyGenerator;
2322
import org.springframework.security.crypto.keygen.StringKeyGenerator;
2423
import org.springframework.security.oauth2.client.registration.ClientRegistration;
@@ -160,7 +159,7 @@ private String expandRedirectUri(ServerHttpRequest request, ClientRegistration c
160159
Map<String, String> uriVariables = new HashMap<>();
161160
uriVariables.put("registrationId", clientRegistration.getRegistrationId());
162161

163-
String baseUrl = UriComponentsBuilder.fromHttpRequest(new ServerHttpRequestDecorator(request))
162+
String baseUrl = UriComponentsBuilder.fromUri(request.getURI())
164163
.replacePath(request.getPath().contextPath().value())
165164
.replaceQuery(null)
166165
.build()

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/server/DefaultServerOAuth2AuthorizationRequestResolverTests.java

+14
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ private OAuth2AuthorizationRequest resolve(String path) {
9090
return this.resolver.resolve(exchange).block();
9191
}
9292

93+
@Test
94+
public void resolveWhenForwardedHeadersClientRegistrationFoundThenWorks() {
95+
when(this.clientRegistrationRepository.findByRegistrationId(any())).thenReturn(
96+
Mono.just(this.registration));
97+
ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/oauth2/authorization/id").header("X-Forwarded-Host", "evil.com"));
98+
99+
OAuth2AuthorizationRequest request = this.resolver.resolve(exchange).block();
100+
101+
assertThat(request.getAuthorizationRequestUri()).matches("https://example.com/login/oauth/authorize\\?" +
102+
"response_type=code&client_id=client-id&" +
103+
"scope=read:user&state=.*?&" +
104+
"redirect_uri=/login/oauth2/code/registration-id");
105+
}
106+
93107
@Test
94108
public void resolveWhenAuthorizationRequestWithValidPkceClientThenResolves() {
95109
when(this.clientRegistrationRepository.findByRegistrationId(any())).thenReturn(

0 commit comments

Comments
 (0)