Gentagne 407 betyder ikke altid, at Java sendte en forkert adgangskode. JDK’ens referenceimplementering deaktiverer normalt Basic-godkendelse til HTTPS CONNECT-tunneler. En proxy, der kun tilbyder Basic, kan blive afvist, før din godkendelses-callback leverer loginoplysninger.

Afgræns callbacken til loginoplysninger

Knyt en Authenticator til Java-HTTP-klienten, og begræns den til den konfigurerede 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();

Dette er opsætningskode til en klient, ikke en global standardgodkender. Erstat dokumentationsadressen, og brug loginoplysninger, der faktisk er udleveret til tjenesten. Kontrol af anmodertype og endepunkt forhindrer callbacken i uden videre at tilbyde proxykontoen til et websteds godkendelsesudfordring.

Kontroller, hvilket godkendelsestrin der fejler

JDK’en har separate indstillinger for deaktiverede skemaer til almindelig HTTP-proxybrug og CONNECT-tunneler. Navnene er jdk.http.auth.proxying.disabledSchemes og jdk.http.auth.tunneling.disabledSchemes.

Det forklarer, hvorfor HTTP-trafik kan godkendes, mens en HTTPS-tunnel gennem samme proxy fejler. Kontroller runtime-miljøets conf/net.properties og udrulningspolitikken frem for at antage samme effektive standarder på en anden maskine.

Global tømning af en liste over deaktiverede skemaer er ikke en generel proxyreparation. Basic-oplysninger sendt til en HTTP-proxy i klartekst beskyttes ikke af destinationens senere TLS-forbindelse. Gennemgå proxytransporten, godkendelsesmetoden og udrulningspolitikken, før en ændring godkendes.

JDK’ens dokumenterede indbyggede godkendelsesadfærd lover heller ikke støtte til hvert skema, en proxy annoncerer. En manuelt angivet Authorization- eller Proxy-Authorization-header ændrer det automatiske godkendelsesforløb, så undersøg egne headere, når callbacken opfører sig anderledes end eksemplet.

Relaterede artikler