Ein gjenteken 407 tyder ikkje alltid at Java sende feil passord. Referanseimplementasjonen av JDK deaktiverer vanlegvis Basic-autentisering for HTTPS-CONNECT-tunnelar. Ein proxy som berre tilbyr Basic, kan bli avvist før autentiseringstilbakekallet ditt leverer påloggingsdata.

Avgrens verkeområdet til tilbakekallet for påloggingsdata

Knyt ein Authenticator til Java-HTTP-klienten og avgrens han til den konfigurerte proxyen:

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 oppsettskode for éin klient, ikkje ein global standardautentiserar. Byt ut dokumentasjonsadressa og bruk påloggingsdata som faktisk er oppgjevne for tenesta. Kontrollane av førespurnadstype og endepunkt hindrar at det same tilbakekallet tankelaust tilbyr proxykontoen ved ei autentiseringsutfordring frå ein nettstad.

Sjekk kva autentiseringssteg som feilar

JDK har separate innstillingar for deaktiverte autentiseringsordningar ved vanleg HTTP-proxytrafikk og ved CONNECT-tunnelar. Dei aktuelle namna er jdk.http.auth.proxying.disabledSchemes og jdk.http.auth.tunneling.disabledSchemes.

Dette forklarer kvifor HTTP-trafikk kan autentiserast medan ein HTTPS-tunnel gjennom den same proxyen feilar. Sjekk conf/net.properties i køyremiljøet og utrullingspolicyen i staden for å rekne med at ei anna maskin har dei same verksame standardverdiane.

Å tømme ei liste over deaktiverte ordningar globalt er inga generell proxyløysing. Basic-påloggingsdata sende til ein HTTP-proxy i klartekst vert ikkje verna av det seinare TLS-sambandet med målet. Vurder proxytransporten, autentiseringsmetoden og utrullingspolicyen før du godkjenner ei endring.

Den dokumenterte innebygde autentiseringsåtferda til JDK lovar heller ikkje støtte for kvar ordning ein proxy annonserer. Ein manuelt oppgjeven Authorization- eller Proxy-Authorization-header endrar den automatiske autentiseringsflyten, så sjå etter eigendefinerte headerar når tilbakekallet oppfører seg annleis enn i dømet.

Relaterte artiklar