El inicio de sesión en el proxy pertenece al proveedor de credenciales del transporte. Con Spring 6 y Apache HttpClient 5, limita esa cuenta al intermediario:

var proxy = new org.apache.hc.core5.http.HttpHost(
    "http", "proxy.example", 8080);
var credentials = new org.apache.hc.client5.http.impl.auth
    .BasicCredentialsProvider();
credentials.setCredentials(
    new org.apache.hc.client5.http.auth.AuthScope(proxy),
    new org.apache.hc.client5.http.auth.UsernamePasswordCredentials(
        proxyUser, proxyPassword.toCharArray()));

var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
    .setProxy(proxy)
    .setDefaultCredentialsProvider(credentials)
    .build();
var factory = new org.springframework.http.client
    .HttpComponentsClientHttpRequestFactory(http);
var rest = new org.springframework.web.client.RestTemplate(factory);

La aplicación proporciona los valores proxyUser y proxyPassword y es propietaria del ciclo de vida del cliente HTTP. Reutiliza rest para la carga de trabajo en lugar de construir otra plantilla predeterminada en el lugar de la llamada.

AuthScope limita dónde son elegibles estas credenciales. El ejemplo proporciona credenciales normales de usuario y contraseña; el nombre BasicCredentialsProvider no obliga a que cada desafío use el esquema HTTP Basic.

Con un destino HTTPS, el transporte puede responder a un desafío del proxy durante CONNECT, antes de que exista la solicitud HTTP cifrada de la aplicación. Un interceptor de destino genérico que añade Proxy-Authorization no equivale a esa negociación.

Configura por separado cualquier cuenta de destino. Si el proxy sigue rechazando la solicitud, conserva el esquema de autenticación que anuncia y el host y puerto efectivos. Una credencial limitada a otro punto final no coincidirá solo porque la contraseña sea correcta.

Artículos relacionados