Ponavljajoči se 407 ne pomeni vedno, da je Java poslala napačno geslo. Referenčna izvedba JDK običajno onemogoči avtentikacijo Basic za tunele HTTPS CONNECT. Proxy, ki ponuja samo Basic, je lahko zavrnjen, še preden povratni klic za avtentikacijo posreduje poverilnice.

Omejite doseg povratnega klica za poverilnice

Dodelite Authenticator odjemalcu Java HTTP in ga omejite na nastavljeni proxy:

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();

To je nastavitvena koda za enega odjemalca, ne globalni privzeti avtentikator. Zamenjajte dokumentacijski naslov in uporabite poverilnice, ki so bile dejansko izdane za to storitev. Preverjanje vrste zahtevajočega in končne točke prepreči, da bi isti povratni klic neprevidno ponudil račun proxyja ob zahtevi spletnega mesta za avtentikacijo.

Preverite, katera faza avtentikacije odpove

JDK ima ločene nastavitve onemogočenih shem za običajni promet HTTP prek proxyja in za tunele CONNECT. Ustrezni imeni sta jdk.http.auth.proxying.disabledSchemes in jdk.http.auth.tunneling.disabledSchemes.

To pojasni, zakaj se promet HTTP lahko avtenticira, tunel HTTPS prek istega proxyja pa odpove. Preverite conf/net.properties izvajalnega okolja in pravilnik uvajanja, namesto da bi predpostavili enake dejanske privzete vrednosti na drugem računalniku.

Globalno praznjenje seznama onemogočenih shem ni splošno popravilo proxyja. Poverilnic Basic, poslanih nešifriranemu proxyju HTTP, ne zaščiti poznejša povezava TLS s ciljem. Pred odobritvijo spremembe preglejte transport do proxyja, način avtentikacije in pravilnik uvajanja.

Dokumentirano delovanje vgrajene avtentikacije JDK prav tako ne obljublja podpore za vsako shemo, ki jo proxy oglašuje. Ročno podana glava Authorization ali Proxy-Authorization spremeni potek samodejnega avtentikatorja, zato preverite prilagojene glave, kadar se povratni klic vede drugače kot v primeru.

Sorodni članki