Java-proxyfeil 407: sjekk Basic-autentisering for CONNECT
Avgrens Java-påloggingsdata til proxyen, og sjekk den eigne JDK-policyen for Basic-autentisering i HTTPS-CONNECT-tunnelar.
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.