Gabime 407 të proxy-t në Java: kontrolloni autentikimin Basic për CONNECT
Kufizoni kredencialet Java te proxy dhe kontrolloni politikën e veçantë të JDK-së për autentikimin Basic në tunelet HTTPS CONNECT.
Një 407 i përsëritur nuk do të thotë gjithmonë se Java dërgoi fjalëkalimin e gabuar. Implementimi referencë i JDK-së zakonisht çaktivizon autentikimin Basic për tunelet HTTPS CONNECT. Një proxy që ofron vetëm Basic mund të refuzohet para se callback-u i autentikimit të japë kredencialet.
Kufizoni fushën e callback-ut të kredencialeve
Lidhni një Authenticator me klientin HTTP Java dhe kufizojeni te proxy i konfiguruar:
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();
Ky është kod konfigurimi për një klient, jo një autentikues global i parazgjedhur. Zëvendësoni adresën e dokumentacionit dhe përdorni kredencialet e dhëna vërtet për atë shërbim. Kontrollet e llojit të kërkuesit dhe të pikës fundore e pengojnë të njëjtin callback që të ofrojë pa kujdes llogarinë e proxy-t për një sfidë autentikimi të një faqeje web.
Kontrolloni cila fazë e autentikimit po dështon
JDK-ja ka cilësime të veçanta të skemave të çaktivizuara për trafikun e zakonshëm HTTP përmes proxy-t dhe për tunelet CONNECT. Emrat përkatës janë jdk.http.auth.proxying.disabledSchemes dhe jdk.http.auth.tunneling.disabledSchemes.
Kjo shpjegon pse trafiku HTTP mund të autentikohet ndërsa një tunel HTTPS përmes të njëjtit proxy dështon. Kontrolloni conf/net.properties të mjedisit të ekzekutimit dhe politikën e vendosjes, në vend që të supozoni se një makinë tjetër ka të njëjtat vlera të parazgjedhura efektive.
Zbrazja globale e listës së skemave të çaktivizuara nuk është riparim i përgjithshëm për proxy-t. Kredencialet Basic të dërguara te një proxy HTTP me tekst të qartë nuk mbrohen nga lidhja e mëvonshme TLS me destinacionin. Shqyrtoni transportin e proxy-t, metodën e autentikimit dhe politikën e vendosjes para se të miratoni një ndryshim.
Sjellja e dokumentuar e autentikimit të integruar në JDK gjithashtu nuk premton mbështetje për çdo skemë që shpall një proxy. Një header Authorization ose Proxy-Authorization i dhënë manualisht ndryshon rrjedhën e autentikuesit automatik, ndaj inspektoni header-at e personalizuar kur callback-u sillet ndryshe nga shembulli.