@ -197,6 +197,44 @@ public class OAuth2LoginAuthenticationFilterTests {
@@ -197,6 +197,44 @@ public class OAuth2LoginAuthenticationFilterTests {
assertThat ( authenticationException . getError ( ) . getErrorCode ( ) ) . isEqualTo ( "authorization_request_not_found" ) ;
}
// gh-5251
@Test
public void doFilterWhenAuthorizationResponseClientRegistrationNotFoundThenClientRegistrationNotFoundError ( ) throws Exception {
String requestUri = "/login/oauth2/code/" + this . registration2 . getRegistrationId ( ) ;
MockHttpServletRequest request = new MockHttpServletRequest ( "GET" , requestUri ) ;
request . setServletPath ( requestUri ) ;
request . addParameter ( OAuth2ParameterNames . CODE , "code" ) ;
request . addParameter ( OAuth2ParameterNames . STATE , "state" ) ;
MockHttpServletResponse response = new MockHttpServletResponse ( ) ;
FilterChain filterChain = mock ( FilterChain . class ) ;
ClientRegistration registrationNotFound = ClientRegistration . withRegistrationId ( "registration-not-found" )
. clientId ( "client-1" )
. clientSecret ( "secret" )
. clientAuthenticationMethod ( ClientAuthenticationMethod . BASIC )
. authorizationGrantType ( AuthorizationGrantType . AUTHORIZATION_CODE )
. redirectUriTemplate ( "{baseUrl}/login/oauth2/code/{registrationId}" )
. scope ( "user" )
. authorizationUri ( "https://provider.com/oauth2/authorize" )
. tokenUri ( "https://provider.com/oauth2/token" )
. userInfoUri ( "https://provider.com/oauth2/user" )
. userNameAttributeName ( "id" )
. clientName ( "client-1" )
. build ( ) ;
this . setUpAuthorizationRequest ( request , response , registrationNotFound ) ;
this . filter . doFilter ( request , response , filterChain ) ;
ArgumentCaptor < AuthenticationException > authenticationExceptionArgCaptor = ArgumentCaptor . forClass ( AuthenticationException . class ) ;
verify ( this . failureHandler ) . onAuthenticationFailure ( any ( HttpServletRequest . class ) , any ( HttpServletResponse . class ) ,
authenticationExceptionArgCaptor . capture ( ) ) ;
assertThat ( authenticationExceptionArgCaptor . getValue ( ) ) . isInstanceOf ( OAuth2AuthenticationException . class ) ;
OAuth2AuthenticationException authenticationException = ( OAuth2AuthenticationException ) authenticationExceptionArgCaptor . getValue ( ) ;
assertThat ( authenticationException . getError ( ) . getErrorCode ( ) ) . isEqualTo ( "client_registration_not_found" ) ;
}
@Test
public void doFilterWhenAuthorizationResponseValidThenAuthorizationRequestRemoved ( ) throws Exception {
String requestUri = "/login/oauth2/code/" + this . registration2 . getRegistrationId ( ) ;