端点 /login/oauth2/code 消失,而 /oauth2/authorization 继续工作

Endpoint /login/oauth2/code disappear whereas /oauth2/authorization continue to work

配置自定义过滤器后,/login/oauth2/code/{registrationId} 不再显示,/oauth2/authorization/{reigstrationId} 仍然运行良好。 Spring 安全停止实施 /login/oauth2/code/{registrationId}

有什么建议吗?

我的 configure() 函数

            http.
                .antMatcher("/oauth2/authorization/**")
                .addFilterBefore(
                    ValidationFilter(),
                    OAuth2AuthorizationRequestRedirectFilter::class.java
                )
                .oauth2Login()
                .userInfoEndpoint()
                .and()
                .loginPage("/$AUTH_DEFAULT_SUCCESS_ROUTE/token")
                .authorizationEndpoint()
                .and()
                .tokenEndpoint()

我的过滤器class

class ValidationFilter(private val configRepository:ConfigRepository) : OncePerRequestFilter() {

    override fun doFilterInternal(
        request: HttpServletRequest,
        response: HttpServletResponse,
        filterChain: FilterChain
    ) {
        val registrationId = request.requestURI.split("/").last()

        val findById = configRepository.findById(registrationId)
        if (findById.isEmpty) {
            response.sendError(
                HttpStatus.NOT_FOUND.value(),
                "$config is not registered"
            )
        } else {
            filterChain.doFilter(request, response)
        }
    }
}

用日志更新

2021-09-13 11:52:00.039 DEBUG 5499 --- [nio-8094-exec-1] o.apache.catalina.valves.RemoteIpValve   : Incoming request /login/oauth2/code/demo-auth with originalRemoteAddr [0:0:0:0:0:0:0:1], originalRemoteHost=[0:0:0:0:0:0:0:1], originalSecure=[false], originalScheme=[http], originalServerName=[localhost], originalServerPort=[8094] will be seen as newRemoteAddr=[0:0:0:0:0:0:0:1], newRemoteHost=[0:0:0:0:0:0:0:1], newSecure=[false], newScheme=[http], newServerName=[localhost], newServerPort=[8094]
2021-09-13 11:52:00.039 DEBUG 5499 --- [nio-8094-exec-1] o.a.c.authenticator.AuthenticatorBase    : Security checking request GET /login/oauth2/code/demo-auth
2021-09-13 11:52:00.040 DEBUG 5499 --- [nio-8094-exec-1] org.apache.catalina.realm.RealmBase      :   No applicable constraints defined
2021-09-13 11:52:00.041 DEBUG 5499 --- [nio-8094-exec-1] o.a.c.a.jaspic.AuthConfigFactoryImpl     : Loading persistent provider registrations from [/private/var/folders/px/pqfh3tdd5mz3fb0ck71241t00000gp/T/tomcat.8094.1488514718398247839/conf/jaspic-providers.xml]
2021-09-13 11:52:00.042 DEBUG 5499 --- [nio-8094-exec-1] o.a.c.authenticator.AuthenticatorBase    : Not subject to any constraint
2021-09-13 11:52:00.049 DEBUG 5499 --- [nio-8094-exec-1] o.s.security.web.FilterChainProxy        : Securing GET /login/oauth2/code/demo-auth?code=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7Im5lZWRfcGF0aWVudF9iYW5uZXIiOmZhbHNlLCJzbWFydF9zdHlsZV91cmwiOiJodHRwczovL2xhdW5jaC5zbWFydGhlYWx0aGl0Lm9yZy9zbWFydC1zdHlsZS5qc29uIiwicGF0aWVudCI6Ijg3YTMzOWQwLThjYWUtNDE4ZS04OWM3LTg2NTFlNmFhYjNjNiIsImVuY291bnRlciI6IjQxOGUzOGNmLTlkYTYtNDE1NS1iMjA1LTBiZTI0MDI0YjFkYiJ9LCJjbGllbnRfaWQiOiJBbnkiLCJzY29wZSI6ImxhdW5jaCBvcGVuaWQgZmhpclVzZXIiLCJ1c2VyIjoiUGF0aWVudC84N2EzMzlkMC04Y2FlLTQxOGUtODljNy04NjUxZTZhYWIzYzYiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vbG9jYWxob3N0OjgwOTQvaW5kZXgiLCJpYXQiOjE2MzE1MjY2NjIsImV4cCI6MTYzMTUyNjk2Mn0.neurufjsALJMPlH1Kx-mjoz4GABUI05mQ46f48iUxcQ&state=eyJhbGciOiJub25lIn0.eyJrZXkiOiJZVWNncU8tMmZtZFRYcDVVNFM1VTVlR2RaYVc0UVpkRTU2aFJDSlZPZkJnPSIsImNsaWVudFJlZ2lzdHJhdGlvbklkIjoiZGVtby1hdXRoIn0.
2021-09-13 11:52:00.052 DEBUG 5499 --- [nio-8094-exec-1] s.s.w.c.SecurityContextPersistenceFilter : Set SecurityContextHolder to empty SecurityContext
2021-09-13 11:52:00.054 DEBUG 5499 --- [nio-8094-exec-1] o.s.s.w.a.AnonymousAuthenticationFilter  : Set SecurityContextHolder to anonymous SecurityContext
2021-09-13 11:52:00.055 DEBUG 5499 --- [nio-8094-exec-1] o.s.s.w.a.i.FilterSecurityInterceptor    : Authorized public object filter invocation [GET /login/oauth2/code/demo-auth?code=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7Im5lZWRfcGF0aWVudF9iYW5uZXIiOmZhbHNlLCJzbWFydF9zdHlsZV91cmwiOiJodHRwczovL2xhdW5jaC5zbWFydGhlYWx0aGl0Lm9yZy9zbWFydC1zdHlsZS5qc29uIiwicGF0aWVudCI6Ijg3YTMzOWQwLThjYWUtNDE4ZS04OWM3LTg2NTFlNmFhYjNjNiIsImVuY291bnRlciI6IjQxOGUzOGNmLTlkYTYtNDE1NS1iMjA1LTBiZTI0MDI0YjFkYiJ9LCJjbGllbnRfaWQiOiJBbnkiLCJzY29wZSI6ImxhdW5jaCBvcGVuaWQgZmhpclVzZXIiLCJ1c2VyIjoiUGF0aWVudC84N2EzMzlkMC04Y2FlLTQxOGUtODljNy04NjUxZTZhYWIzYzYiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vbG9jYWxob3N0OjgwOTQvaW5kZXgiLCJpYXQiOjE2MzE1MjY2NjIsImV4cCI6MTYzMTUyNjk2Mn0.neurufjsALJMPlH1Kx-mjoz4GABUI05mQ46f48iUxcQ&state=eyJhbGciOiJub25lIn0.eyJrZXkiOiJZVWNncU8tMmZtZFRYcDVVNFM1VTVlR2RaYVc0UVpkRTU2aFJDSlZPZkJnPSIsImNsaWVudFJlZ2lzdHJhdGlvbklkIjoiZGVtby1hdXRoIn0.]
2021-09-13 11:52:00.055 DEBUG 5499 --- [nio-8094-exec-1] o.s.security.web.FilterChainProxy        : Secured GET /login/oauth2/code/demo-auth?code=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7Im5lZWRfcGF0aWVudF9iYW5uZXIiOmZhbHNlLCJzbWFydF9zdHlsZV91cmwiOiJodHRwczovL2xhdW5jaC5zbWFydGhlYWx0aGl0Lm9yZy9zbWFydC1zdHlsZS5qc29uIiwicGF0aWVudCI6Ijg3YTMzOWQwLThjYWUtNDE4ZS04OWM3LTg2NTFlNmFhYjNjNiIsImVuY291bnRlciI6IjQxOGUzOGNmLTlkYTYtNDE1NS1iMjA1LTBiZTI0MDI0YjFkYiJ9LCJjbGllbnRfaWQiOiJBbnkiLCJzY29wZSI6ImxhdW5jaCBvcGVuaWQgZmhpclVzZXIiLCJ1c2VyIjoiUGF0aWVudC84N2EzMzlkMC04Y2FlLTQxOGUtODljNy04NjUxZTZhYWIzYzYiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vbG9jYWxob3N0OjgwOTQvaW5kZXgiLCJpYXQiOjE2MzE1MjY2NjIsImV4cCI6MTYzMTUyNjk2Mn0.neurufjsALJMPlH1Kx-mjoz4GABUI05mQ46f48iUxcQ&state=eyJhbGciOiJub25lIn0.eyJrZXkiOiJZVWNncU8tMmZtZFRYcDVVNFM1VTVlR2RaYVc0UVpkRTU2aFJDSlZPZkJnPSIsImNsaWVudFJlZ2lzdHJhdGlvbklkIjoiZGVtby1hdXRoIn0.
2021-09-13 11:52:00.057 DEBUG 5499 --- [nio-8094-exec-1] org.apache.tomcat.util.http.Parameters   : Set encoding to UTF-8
2021-09-13 11:52:00.057 DEBUG 5499 --- [nio-8094-exec-1] org.apache.tomcat.util.http.Parameters   : Decoding query null UTF-8
2021-09-13 11:52:00.057 DEBUG 5499 --- [nio-8094-exec-1] org.apache.tomcat.util.http.Parameters   : Start processing with input [code=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7Im5lZWRfcGF0aWVudF9iYW5uZXIiOmZhbHNlLCJzbWFydF9zdHlsZV91cmwiOiJodHRwczovL2xhdW5jaC5zbWFydGhlYWx0aGl0Lm9yZy9zbWFydC1zdHlsZS5qc29uIiwicGF0aWVudCI6Ijg3YTMzOWQwLThjYWUtNDE4ZS04OWM3LTg2NTFlNmFhYjNjNiIsImVuY291bnRlciI6IjQxOGUzOGNmLTlkYTYtNDE1NS1iMjA1LTBiZTI0MDI0YjFkYiJ9LCJjbGllbnRfaWQiOiJBbnkiLCJzY29wZSI6ImxhdW5jaCBvcGVuaWQgZmhpclVzZXIiLCJ1c2VyIjoiUGF0aWVudC84N2EzMzlkMC04Y2FlLTQxOGUtODljNy04NjUxZTZhYWIzYzYiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vbG9jYWxob3N0OjgwOTQvaW5kZXgiLCJpYXQiOjE2MzE1MjY2NjIsImV4cCI6MTYzMTUyNjk2Mn0.neurufjsALJMPlH1Kx-mjoz4GABUI05mQ46f48iUxcQ&state=eyJhbGciOiJub25lIn0.eyJrZXkiOiJZVWNncU8tMmZtZFRYcDVVNFM1VTVlR2RaYVc0UVpkRTU2aFJDSlZPZkJnPSIsImNsaWVudFJlZ2lzdHJhdGlvbklkIjoiZGVtby1hdXRoIn0.]
2021-09-13 11:52:00.057 DEBUG 5499 --- [nio-8094-exec-1] o.s.web.servlet.DispatcherServlet        : GET "/login/oauth2/code/demo-auth?code=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7Im5lZWRfcGF0aWVudF9iYW5uZXIiOmZhbHNlLCJzbWFydF9zdHlsZV91cmwiOiJodHRwczovL2xhdW5jaC5zbWFydGhlYWx0aGl0Lm9yZy9zbWFydC1zdHlsZS5qc29uIiwicGF0aWVudCI6Ijg3YTMzOWQwLThjYWUtNDE4ZS04OWM3LTg2NTFlNmFhYjNjNiIsImVuY291bnRlciI6IjQxOGUzOGNmLTlkYTYtNDE1NS1iMjA1LTBiZTI0MDI0YjFkYiJ9LCJjbGllbnRfaWQiOiJBbnkiLCJzY29wZSI6ImxhdW5jaCBvcGVuaWQgZmhpclVzZXIiLCJ1c2VyIjoiUGF0aWVudC84N2EzMzlkMC04Y2FlLTQxOGUtODljNy04NjUxZTZhYWIzYzYiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vbG9jYWxob3N0OjgwOTQvaW5kZXgiLCJpYXQiOjE2MzE1MjY2NjIsImV4cCI6MTYzMTUyNjk2Mn0.neurufjsALJMPlH1Kx-mjoz4GABUI05mQ46f48iUxcQ&state=eyJhbGciOiJub25lIn0.eyJrZXkiOiJZVWNncU8tMmZtZFRYcDVVNFM1VTVlR2RaYVc0UVpkRTU2aFJDSlZPZkJnPSIsImNsaWVudFJlZ2lzdHJhdGlvbklkIjoiZGVtby1hdXRoIn0.", parameters={masked}
2021-09-13 11:52:00.063 DEBUG 5499 --- [nio-8094-exec-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ResourceHttpRequestHandler [Classpath [META-INF/resources/], Classpath [resources/], Classpath [static/], Classpath [public/], ServletContext [/]]
2021-09-13 11:52:00.066 DEBUG 5499 --- [nio-8094-exec-1] o.s.w.s.r.ResourceHttpRequestHandler     : Resource not found
2021-09-13 11:52:00.066 DEBUG 5499 --- [nio-8094-exec-1] w.c.HttpSessionSecurityContextRepository : Did not store anonymous SecurityContext
2021-09-13 11:52:00.066 DEBUG 5499 --- [nio-8094-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND
2021-09-13 11:52:00.067 DEBUG 5499 --- [nio-8094-exec-1] w.c.HttpSessionSecurityContextRepository : Did not store anonymous SecurityContext
2021-09-13 11:52:00.067 DEBUG 5499 --- [nio-8094-exec-1] s.s.w.c.SecurityContextPersistenceFilter : Cleared SecurityContextHolder to complete request
2021-09-13 11:52:00.068 DEBUG 5499 --- [nio-8094-exec-1] o.a.c.c.C.[Tomcat].[localhost]           : Processing ErrorPage[errorCode=0, location=/error]

更新我的其他发现。使用此设置:

 .antMatcher("/oauth2/authorization/**")
                .addFilterBefore(
                    ValidationFilter(),
                    OAuth2AuthorizationRequestRedirectFilter::class.java
                )
               .antMatcher(  "/login/oauth2/code/**")
                .addFilterBefore(
                    ValidationFilter(),
                    OAuth2AuthorizationRequestRedirectFilter::class.java
                )

Then 
"/oauth2/authorization/**" doesn't work anymore

我终于成功了。关键是/oauth2/authorization/login/oauth2/code/都要配置antMatchers,否则如果你只配置一个端点,另一个端点会消失。

完整配置:

import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI
import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI

@EnableWebSecurity
class MySecurityConfig {

    @Configuration
    @Order(1)
    class MyWebSecurityConfigurerAdapter @Autowired constructor(
    ) : WebSecurityConfigurerAdapter() {

        override fun configure(http: HttpSecurity) {
            val validator = ValidationFilter()
            http
                .requestMatchers()
                .antMatchers("$DEFAULT_AUTHORIZATION_REQUEST_BASE_URI/**", DEFAULT_FILTER_PROCESSES_URI)
                .and()
                .addFilterBefore(
                    validator,
                    OAuth2AuthorizationRequestRedirectFilter::class.java
                )
                .oauth2Login()
        }
    }

    @Configuration
    @Order(2)
    class CommonWebSecurityConfigurerAdapter : WebSecurityConfigurerAdapter() {
        override fun configure(http: HttpSecurity) {
            http.headers().frameOptions().disable()
                .and()
                // REST API doesn't need csrf
                .csrf().disable()
        }
    }

    @Configuration
    @Order(3)
    class BasicAuthWebSecurityConfigurerAdapter : WebSecurityConfigurerAdapter() {

        override fun configure(http: HttpSecurity) {
            http
                .authorizeRequests().antMatchers(
                    "/oauth2/v1/configs/**",
                    "/v1/token/validate/**"
                )
                .authenticated().and().httpBasic()
        }

        @Autowired
        fun configureGlobal(auth: AuthenticationManagerBuilder) {
            auth.inMemoryAuthentication()
                .withUser(basicAuthUserName)
                .password("{noop}$basicAuthPassword")
                .roles("USER")
        }
    }
}