【问题标题】:Alternative For OAuth2FeignRequestInterceptor as it is deprecated NOWOAuth2FeignRequestInterceptor 的替代方案,因为它现在已被弃用
【发布时间】:2021-05-11 11:21:48
【问题描述】:

在我之前的实现中,我使用的是 OAuth2FeignRequestInterceptor。但是从 Spring security 5 开始,OAuth2FeignRequestInterceptor 似乎已被弃用。实现相同目标的替代方法是什么?我搜索了很多博客和主题,但找不到任何答案。

【问题讨论】:

    标签: spring-boot spring-oauth2 spring-cloud-feign openfeign


    【解决方案1】:

    build.gradle.kts

    implementation("org.springframework.security:spring-security-oauth2-client")
    

    application.yml

    spring:
      security:
        oauth2:
          client:
            registration:
              keycloak: // <- replace with your custom oauth2 client details
                provider: keycloak
                client-id: [keycloak-client-id]
                client-secret: [keycloak-client-secret]
                authorization-grant-type: client_credentials
                scope: openid
            provider:
              keycloak: // <- replace with your custom oauth2 provider details
                authorization-uri: http://localhost:8080/auth/realms/yourealm/protocol/openid-connect/auth
                token-uri: http://localhost:8080/auth/realms/yourealm/protocol/openid-connect/token
    

    Oauth2Config

    @Configuration
    class Oauth2Config {
      @Bean
      fun authorizedClientManager(
        clientRegistrationRepository: ClientRegistrationRepository?,
        authorizedClientRepository: OAuth2AuthorizedClientRepository?
      ): OAuth2AuthorizedClientManager? {
        val authorizedClientProvider: OAuth2AuthorizedClientProvider = OAuth2AuthorizedClientProviderBuilder.builder()
          .authorizationCode()
          .clientCredentials()
          .build()
        val authorizedClientManager = DefaultOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientRepository)
        authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider)
    
        return authorizedClientManager
      }
    }
    

    FeignOauth2配置

    class FeignOauth2Configuration (private val authorizedClientManager: OAuth2AuthorizedClientManager) {
      @Bean
      fun oauth2HttpRequestInterceptor(): RequestInterceptor {
        return RequestInterceptor { request ->
          request.headers()["Authorization"] = listOf("Bearer ${getAccessToken()?.tokenValue}")
        }
      }
    
      private fun getAccessToken(): OAuth2AccessToken? {
        val request = OAuth2AuthorizeRequest
          .withClientRegistrationId("keycloak")
          .principal("client-id")
          .build()
        return authorizedClientManager.authorize(request)?.accessToken
      }
    }
    

    用户客户端

    @FeignClient(name="user-service", configuration = [FeignOauth2Configuration::class])
    interface UserClient {
      @GetMapping("/users")
      fun getAllUsers(): List<UserDto>
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 2020-05-05
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      相关资源
      最近更新 更多