|
27 | 27 | import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType; |
28 | 28 | import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; |
29 | 29 |
|
30 | | -import static org.assertj.core.api.Assertions.assertThat; |
31 | | -import static org.assertj.core.api.Assertions.assertThatThrownBy; |
32 | | -import static org.assertj.core.api.Assertions.entry; |
| 30 | +import static org.assertj.core.api.Assertions.*; |
33 | 31 |
|
34 | 32 | /** |
35 | 33 | * Tests for {@link DefaultOAuth2AuthorizationRequestResolver}. |
@@ -226,4 +224,37 @@ public void resolveWhenAuthorizationRequestHasActionParameterLoginThenRedirectUr |
226 | 224 | OAuth2AuthorizationRequest authorizationRequest = this.resolver.resolve(request); |
227 | 225 | assertThat(authorizationRequest.getAuthorizationRequestUri()).matches("https://example.com/login/oauth/authorize\\?response_type=code&client_id=client-id-2&scope=read%3Auser&state=.{15,}&redirect_uri=http%3A%2F%2Flocalhost%2Flogin%2Foauth2%2Fcode%2Fregistration-id-2"); |
228 | 226 | } |
| 227 | + |
| 228 | + //gh-5760 |
| 229 | + @Test |
| 230 | + public void resolveWhenAuthorizationUriHasQueryParametersThenAuthorizationURIIncludesAdditionalQueryParameters() { |
| 231 | + String queryParams = "queryparam=test&queryparam2=test&queryparam3=a test with spaces"; |
| 232 | + ClientRegistration clientRegistration = this.registration2; |
| 233 | + String requestUri = this.authorizationRequestBaseUri + "/" + clientRegistration.getRegistrationId()+"?"+queryParams; |
| 234 | + |
| 235 | + MockHttpServletRequest request = new MockHttpServletRequest("GET", requestUri); |
| 236 | + request.setServletPath(requestUri); |
| 237 | + |
| 238 | + OAuth2AuthorizationRequest authorizationRequest = this.resolver.resolve(request); |
| 239 | + |
| 240 | + assertThat(authorizationRequest.getAdditionalParameters()).isNotEmpty(); |
| 241 | + assertThat(authorizationRequest.getAdditionalParameters().size()).isEqualTo(4); |
| 242 | + assertThat(authorizationRequest.getAuthorizationRequestUri()).matches("https://example.com/login/oauth/authorize\\?response_type=code&client_id=client-id-2&scope=read%3Auser&state=.{15,}&redirect_uri=http%3A%2F%2Flocalhost%2Flogin%2Foauth2%2Fcode%2Fregistration-id-2&queryparam=test&queryparam3=a\\+test\\+with\\+spaces&queryparam2=test"); |
| 243 | + } |
| 244 | + |
| 245 | + @Test |
| 246 | + public void resolveWhenAuthorizationUriIsMalformedWithMultipleQueryParametersThenIgnoresBadInput() { |
| 247 | + String queryParams = "queryparam=test&queryparam2=test?badparam=param"; |
| 248 | + ClientRegistration clientRegistration = this.registration2; |
| 249 | + String requestUri = this.authorizationRequestBaseUri + "/" + clientRegistration.getRegistrationId()+"?"+queryParams; |
| 250 | + |
| 251 | + MockHttpServletRequest request = new MockHttpServletRequest("GET", requestUri); |
| 252 | + request.setServletPath(requestUri); |
| 253 | + |
| 254 | + OAuth2AuthorizationRequest authorizationRequest = this.resolver.resolve(request); |
| 255 | + |
| 256 | + assertThat(authorizationRequest.getAdditionalParameters()).isNotEmpty(); |
| 257 | + assertThat(authorizationRequest.getAdditionalParameters().size()).isEqualTo(3); |
| 258 | + assertThat(authorizationRequest.getAuthorizationRequestUri()).matches("https://example.com/login/oauth/authorize\\?response_type=code&client_id=client-id-2&scope=read%3Auser&state=.{15,}&redirect_uri=http%3A%2F%2Flocalhost%2Flogin%2Foauth2%2Fcode%2Fregistration-id-2&queryparam=test&queryparam2=test"); |
| 259 | + } |
229 | 260 | } |
0 commit comments