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.

Artikuj të ngjashëm