簡體   English   中英

Spring Boot OAuth Ressource Server代理配置

[英]Spring Boot OAuth Ressource Server Proxy Configuration

我目前正在努力將代理與Spring-Webflux結合使用。 在其他服務中,我始終遵循這種方法,該方法非常有效(從標准環境變量中檢索代理配置):

@Bean
public RestTemplate restTemplate() {
    final RestTemplate restTemplate = new RestTemplate();
    final CloseableHttpClient client = HttpClientBuilder.create().useSystemProperties().build();
    restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(client));
    return restTemplate;
  }

但是現在我正在嘗試使用Spring Oauth-Resource-Server軟件包設置OAuth-Ressource-Server。 該軟件包將Spring-Webflux用於HTTP(S)。 現在,該服務嘗試從給定的uri中獲取jwk集(需要代理),由於連接被拒絕錯誤而失敗。 是否有人將Spring-Webflux / OAuth-Ressource和代理結合使用?

我自己發現,為NimbusReactiveJwtDecoder Bean提供正確配置的Web客戶端即可解決此問題。

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.security.oauth2.jwt.NimbusReactiveJwtDecoder;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.http.client.HttpClient;
import reactor.netty.tcp.ProxyProvider;

@Data
@Component
@Configuration
@ConfigurationProperties(value = "proxy")
public class ProxyConfig {

  private String host;
  private int port;
  private String username;
  private String password;

  @Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
  private String jwkSetUri;

  @Bean
  public WebClient webClient(ReactorClientHttpConnector reactorClientHttpConnector) {
    return WebClient.builder().clientConnector(reactorClientHttpConnector).build();
  }

  @Bean
  public HttpClient httpClient() {
    return HttpClient.create()
        .tcpConfiguration(tcpClient ->
            tcpClient.proxy(
                proxy -> proxy.type(ProxyProvider.Proxy.HTTP).host(host)
                    .port(port).username(username)
                    .password(s -> password)));
  }

  @Bean
  ReactorClientHttpConnector reactorClientHttpConnector(HttpClient httpClient) {
    return new ReactorClientHttpConnector(httpClient);
  }

  @Bean
  public NimbusReactiveJwtDecoder nimbusReactiveJwtDecoder(WebClient webClient) {
    return NimbusReactiveJwtDecoder
        .withJwkSetUri(jwkSetUri)
        .webClient(webClient).build();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM