Toistuva 407 ei aina tarkoita, että Java lähetti väärän salasanan. JDK:n viitetoteutus yleensä poistaa Basic-todennuksen käytöstä HTTPS CONNECT -tunneloinnissa. Pelkkää Basicia tarjoava välityspalvelin voidaan hylätä ennen tunnusten antamista todennuksen takaisinkutsussa.

Rajaa tunnusten takaisinkutsu

Liitä Authenticator Javan HTTP-asiakkaaseen ja rajaa se määritettyyn välityspalvelimeen:

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

Tämä on asiakkaan määrityskoodia, ei globaali oletustodentaja. Korvaa dokumentaatio-osoite ja käytä palvelulle oikeasti annettuja tunnuksia. Pyytäjätyypin ja päätepisteen tarkistukset estävät samaa takaisinkutsua tarjoamasta välityspalvelintiliä huolettomasti verkkosivuston todennuspyyntöön.

Tarkista, mikä todennusvaihe epäonnistuu

JDK:ssa on erilliset estettyjen menetelmien asetukset tavalliselle HTTP-välitykselle ja CONNECT-tunneloinnille. Nimet ovat jdk.http.auth.proxying.disabledSchemes ja jdk.http.auth.tunneling.disabledSchemes.

Siksi HTTP-liikenne voi todentua, vaikka HTTPS-tunneli saman välityspalvelimen läpi epäonnistuu. Tarkista ajoaikaisen ympäristön conf/net.properties ja käyttöönottokäytäntö sen sijaan, että olettaisit toisen koneen käyttävän samoja vaikuttavia oletuksia.

Estettyjen menetelmien listan globaali tyhjennys ei ole yleinen välityspalvelinkorjaus. Salaamattomalle HTTP-välityspalvelimelle lähetettyjä Basic-tunnuksia ei suojaa myöhempi TLS-yhteys kohteeseen. Arvioi välityspalvelimen siirtotapa, todennusmenetelmä ja käyttöönottokäytäntö ennen muutoksen hyväksymistä.

JDK:n dokumentoitu sisäänrakennettu todennuskäyttäytyminen ei myöskään lupaa tukea jokaista välityspalvelimen mainostamaa menetelmää. Käsin annettu Authorization- tai Proxy-Authorization-otsake muuttaa automaattisen todentajan kulkua, joten tarkista omat otsakkeet, jos takaisinkutsu käyttäytyy eri tavalla kuin esimerkki.

Aiheeseen liittyvät artikkelit