Tekrarlanan 407 her zaman Java'nın yanlış parola gönderdiği anlamına gelmez. JDK referans uygulaması normalde HTTPS CONNECT tünellemesi için Basic kimlik doğrulamasını devre dışı bırakır. Yalnızca Basic sunan bir proxy, kimlik doğrulama geri çağrınız kimlik bilgilerini sağlamadan önce reddedilebilir.

Kimlik bilgisi geri çağrısının kapsamını sınırlayın

Java HTTP istemcisine bir Authenticator bağlayın ve bunu yapılandırılmış proxy ile sınırlandırın:

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();

Bu, tek bir istemci için kurulum kodudur; genel varsayılan kimlik doğrulayıcı değildir. Belgelendirme adresini değiştirin ve o hizmet için gerçekten sağlanmış kimlik bilgilerini kullanın. İstekte bulunanın türü ve uç nokta denetimleri, aynı geri çağrının bir web sitesinin kimlik doğrulama isteğine dikkatsizce proxy hesabını sunmasını önler.

Hangi kimlik doğrulama aşamasının başarısız olduğunu denetleyin

JDK'de normal HTTP proxy trafiği ve CONNECT tünellemesi için devre dışı bırakılan şemalara ait ayrı ayarlar vardır. İlgili adlar jdk.http.auth.proxying.disabledSchemes ve jdk.http.auth.tunneling.disabledSchemes şeklindedir.

Bu, HTTP trafiği kimlik doğrulamasından geçebilirken aynı proxy üzerinden HTTPS tünelinin neden başarısız olabileceğini açıklar. Başka bir makinenin aynı etkin varsayılanlara sahip olduğunu varsaymak yerine çalışma ortamının conf/net.properties dosyasını ve dağıtım politikasını denetleyin.

Devre dışı şemalar listesini genel olarak boşaltmak evrensel bir proxy çözümü değildir. Şifrelenmemiş bir HTTP proxy'ye gönderilen Basic kimlik bilgileri, hedefle daha sonra kurulan TLS bağlantısıyla korunmaz. Bir değişikliği onaylamadan önce proxy aktarımını, kimlik doğrulama yöntemini ve dağıtım politikasını inceleyin.

JDK'nin belgelenmiş yerleşik kimlik doğrulama davranışı, proxy'nin duyurduğu her şemayı destekleme sözü de vermez. Elle sağlanan Authorization veya Proxy-Authorization başlığı otomatik kimlik doğrulayıcı akışını değiştirir; bu nedenle geri çağrı örnekten farklı davranıyorsa özel başlıkları inceleyin.

İlgili makaleler