|
29 | 29 | import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
30 | 30 | import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
|
31 | 31 | import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
|
| 32 | +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; |
| 33 | +import org.springframework.security.oauth2.core.OAuth2AuthorizationException; |
| 34 | +import org.springframework.security.oauth2.core.OAuth2Error; |
32 | 35 | import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
|
33 | 36 | import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
|
34 | 37 | import org.springframework.util.CollectionUtils;
|
|
41 | 44 | import java.util.Map;
|
42 | 45 |
|
43 | 46 | import static org.assertj.core.api.Assertions.assertThatCode;
|
| 47 | +import static org.assertj.core.api.Assertions.assertThatThrownBy; |
44 | 48 | import static org.mockito.ArgumentMatchers.any;
|
45 | 49 | import static org.mockito.Mockito.times;
|
46 | 50 | import static org.mockito.Mockito.verify;
|
@@ -226,6 +230,56 @@ public void filterWhenAuthorizationRequestRedirectUriParametersNotMatchThenNotPr
|
226 | 230 | verifyZeroInteractions(this.authenticationManager);
|
227 | 231 | }
|
228 | 232 |
|
| 233 | + // gh-8609 |
| 234 | + @Test |
| 235 | + public void filterWhenAuthenticationConverterThrowsOAuth2AuthorizationExceptionThenMappedToOAuth2AuthenticationException() { |
| 236 | + ClientRegistration clientRegistration = TestClientRegistrations.clientRegistration().build(); |
| 237 | + when(this.clientRegistrationRepository.findByRegistrationId(any())).thenReturn(Mono.empty()); |
| 238 | + |
| 239 | + MockServerHttpRequest authorizationRequest = |
| 240 | + createAuthorizationRequest("/authorization/callback"); |
| 241 | + OAuth2AuthorizationRequest oauth2AuthorizationRequest = |
| 242 | + createOAuth2AuthorizationRequest(authorizationRequest, clientRegistration); |
| 243 | + MockServerHttpRequest authorizationResponse = createAuthorizationResponse(authorizationRequest); |
| 244 | + MockServerWebExchange exchange = MockServerWebExchange.from(authorizationResponse); |
| 245 | + DefaultWebFilterChain chain = new DefaultWebFilterChain( |
| 246 | + e -> e.getResponse().setComplete(), Collections.emptyList()); |
| 247 | + |
| 248 | + this.authorizationRequestRepository.saveAuthorizationRequest(oauth2AuthorizationRequest, exchange).block(); |
| 249 | + |
| 250 | + assertThatThrownBy(() -> this.filter.filter(exchange, chain).block()) |
| 251 | + .isInstanceOf(OAuth2AuthenticationException.class) |
| 252 | + .hasMessageContaining("client_registration_not_found"); |
| 253 | + verifyZeroInteractions(this.authenticationManager); |
| 254 | + } |
| 255 | + |
| 256 | + // gh-8609 |
| 257 | + @Test |
| 258 | + public void filterWhenAuthenticationManagerThrowsOAuth2AuthorizationExceptionThenMappedToOAuth2AuthenticationException() { |
| 259 | + ClientRegistration clientRegistration = TestClientRegistrations.clientRegistration().build(); |
| 260 | + when(this.clientRegistrationRepository.findByRegistrationId(any())) |
| 261 | + .thenReturn(Mono.just(clientRegistration)); |
| 262 | + |
| 263 | + MockServerHttpRequest authorizationRequest = |
| 264 | + createAuthorizationRequest("/authorization/callback"); |
| 265 | + OAuth2AuthorizationRequest oauth2AuthorizationRequest = |
| 266 | + createOAuth2AuthorizationRequest(authorizationRequest, clientRegistration); |
| 267 | + |
| 268 | + when(this.authenticationManager.authenticate(any())) |
| 269 | + .thenReturn(Mono.error(new OAuth2AuthorizationException(new OAuth2Error("authorization_error")))); |
| 270 | + |
| 271 | + MockServerHttpRequest authorizationResponse = createAuthorizationResponse(authorizationRequest); |
| 272 | + MockServerWebExchange exchange = MockServerWebExchange.from(authorizationResponse); |
| 273 | + DefaultWebFilterChain chain = new DefaultWebFilterChain( |
| 274 | + e -> e.getResponse().setComplete(), Collections.emptyList()); |
| 275 | + |
| 276 | + this.authorizationRequestRepository.saveAuthorizationRequest(oauth2AuthorizationRequest, exchange).block(); |
| 277 | + |
| 278 | + assertThatThrownBy(() -> this.filter.filter(exchange, chain).block()) |
| 279 | + .isInstanceOf(OAuth2AuthenticationException.class) |
| 280 | + .hasMessageContaining("authorization_error"); |
| 281 | + } |
| 282 | + |
229 | 283 | private static OAuth2AuthorizationRequest createOAuth2AuthorizationRequest(
|
230 | 284 | MockServerHttpRequest authorizationRequest, ClientRegistration registration) {
|
231 | 285 | Map<String, Object> additionalParameters = new HashMap<>();
|
|
0 commit comments