Un 407 repetido non sempre significa que Java enviou un contrasinal incorrecto. A implementación de referencia do JDK normalmente desactiva a autenticación Basic para túneles HTTPS CONNECT. Un proxy que só ofrece Basic pode rexeitarse antes de que o callback de autenticación proporcione credenciais.

Limita o alcance do callback de credenciais

Asocia un Authenticator ao cliente HTTP de Java e limítao ao proxy configurado:

String proxyHost = "203.0.113.10";
int proxyPort = 8080;
String password = System.getenv("PROXY_PASSWORD");
if (password == null) {
    throw new IllegalStateException("Set PROXY_PASSWORD");
}

java.net.Authenticator auth = new java.net.Authenticator() {
    @Override
    protected java.net.PasswordAuthentication getPasswordAuthentication() {
        if (getRequestorType() == RequestorType.PROXY
                && proxyHost.equals(getRequestingHost())
                && proxyPort == getRequestingPort()) {
            return new java.net.PasswordAuthentication(
                "proxy-user", password.toCharArray());
        }
        return null;
    }
};

java.net.http.HttpClient client = java.net.http.HttpClient.newBuilder()
    .proxy(java.net.ProxySelector.of(
        new java.net.InetSocketAddress(proxyHost, proxyPort)))
    .authenticator(auth)
    .connectTimeout(java.time.Duration.ofSeconds(5))
    .build();

Este código configura un cliente, non un autenticador global predeterminado. Substitúe o enderezo de documentación e usa credenciais realmente proporcionadas para ese servizo. As comprobacións do tipo de solicitante e do punto de conexión evitan que o mesmo callback ofreza sen máis a conta do proxy ante unha petición de autenticación dun sitio web.

Comproba que etapa de autenticación falla

O JDK ten axustes de esquemas desactivados separados para o proxy HTTP normal e os túneles CONNECT. Os nomes son jdk.http.auth.proxying.disabledSchemes e jdk.http.auth.tunneling.disabledSchemes.

Isto explica que o tráfico HTTP poida autenticarse mentres falla un túnel HTTPS polo mesmo proxy. Revisa conf/net.properties do contorno de execución e a política de despregamento en vez de supoñer os mesmos valores efectivos predeterminados noutro ordenador.

Baleirar globalmente unha lista de esquemas desactivados non é unha reparación xeral de proxys. As credenciais Basic enviadas a un proxy HTTP en texto claro non quedan protexidas pola conexión TLS posterior co destino. Revisa o transporte do proxy, o método de autenticación e a política de despregamento antes de aprobar un cambio.

O comportamento de autenticación integrado documentado polo JDK tampouco promete admitir todos os esquemas anunciados por un proxy. Unha cabeceira Authorization ou Proxy-Authorization engadida manualmente cambia o fluxo do autenticador automático; revisa as cabeceiras personalizadas se o callback se comporta distinto do exemplo.

Artigos relacionados