Сервер ресурсов Spring boot OAuth 2 + метод аутентификации резервного копирования фильтра JWT

Я работаю над проектом весенней загрузки с методом аутентификации сервера ресурсов OAuth2, токен доступа проверяется на сервере авторизации.

Это приложение также предоставляет конечную точку для получения токена, подписанного самим собой.

Я хотел бы предоставить метод резервного копирования аутентификации с помощью WebFilter, который проверяет подпись токена, если метод OAuth2 не работает следующим образом:

      @Bean
fun securityWebFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
      return http.invoke {
            csrf { disable() }
            authorizeExchange {
                authorize("/actuator/**", permitAll)
                authorize("/api/login", permitAll)
                authorize("/v3/api-docs", permitAll)
                authorize("/**", authenticated)
            }
            oauth2ResourceServer {
                jwt {
                    jwtAuthenticationConverter = oauth2JwtConverter
                }
            }
            addFilterAt(JWTFilter(tokenService), SecurityWebFiltersOrder.AUTHENTICATION)
      }
}

Мой JWTFilter:

      class JWTFilter(
    private val tokenService: TokenService
) : WebFilter {

    override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
        return resolveToken(exchange.request)
            ?.takeIf { tokenService.validateToken(it) }
            ?.let { tokenService.getAuthentication(it) }
            ?.let { chain.filter(exchange).contextWrite(ReactiveSecurityContextHolder.withAuthentication(it)) }
            ?: chain.filter(exchange)
    }

    private fun resolveToken(request: ServerHttpRequest): String? {
        return request.headers[AUTHORIZATION_HEADER]
            ?.get(0)
            ?.takeIf { it.startsWith("Bearer ") }
            ?.substring(7)
    }
}

Проблема в том, что контекст аутентификации, установленный фильтром, игнорируется, если OAuth2 не работает.

Как я могу это сделать?

0 ответов

Другие вопросы по тегам