ਵਾਰ-ਵਾਰ 407 ਆਉਣ ਦਾ ਮਤਲਬ ਹਮੇਸ਼ਾ ਇਹ ਨਹੀਂ ਕਿ Java ਨੇ ਗਲਤ ਪਾਸਵਰਡ ਭੇਜਿਆ ਹੈ। JDK ਦਾ ਹਵਾਲਾ ਅਮਲੀਕਰਨ ਆਮ ਤੌਰ ’ਤੇ HTTPS CONNECT ਟਨਲਾਂ ਲਈ Basic ਪ੍ਰਮਾਣੀਕਰਨ ਬੰਦ ਰੱਖਦਾ ਹੈ। ਸਿਰਫ਼ Basic ਦੇਣ ਵਾਲੀ ਪ੍ਰੌਕਸੀ ਤੁਹਾਡੇ ਪ੍ਰਮਾਣੀਕਰਨ callback ਦੇ ਲੌਗਇਨ ਵੇਰਵੇ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਰੱਦ ਹੋ ਸਕਦੀ ਹੈ।

ਲੌਗਇਨ ਵੇਰਵਿਆਂ ਦੇ callback ਦਾ ਦਾਇਰਾ ਸੀਮਤ ਰੱਖੋ

Java HTTP ਕਲਾਇੰਟ ਨਾਲ ਇੱਕ Authenticator ਜੋੜੋ ਅਤੇ ਇਸ ਨੂੰ ਕੌਂਫਿਗਰ ਕੀਤੀ ਪ੍ਰੌਕਸੀ ਤੱਕ ਸੀਮਤ ਰੱਖੋ:

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

ਇਹ ਇੱਕ ਕਲਾਇੰਟ ਸੈੱਟਅੱਪ ਕਰਨ ਦਾ ਕੋਡ ਹੈ, ਕੋਈ ਗਲੋਬਲ ਮੂਲ ਪ੍ਰਮਾਣੀਕਾਰਕ ਨਹੀਂ। ਦਸਤਾਵੇਜ਼ੀ ਪਤਾ ਬਦਲੋ ਅਤੇ ਉਸ ਸੇਵਾ ਲਈ ਅਸਲ ਵਿੱਚ ਦਿੱਤੇ ਲੌਗਇਨ ਵੇਰਵੇ ਵਰਤੋ। ਬੇਨਤੀਕਰਤਾ ਦੀ ਕਿਸਮ ਅਤੇ ਐਂਡਪੌਇੰਟ ਦੀ ਜਾਂਚ ਉਸੇ callback ਨੂੰ ਵੈੱਬਸਾਈਟ ਦੀ ਪ੍ਰਮਾਣੀਕਰਨ ਚੁਣੌਤੀ ਉੱਤੇ ਲਾਪਰਵਾਹੀ ਨਾਲ ਪ੍ਰੌਕਸੀ ਖਾਤਾ ਦੇਣ ਤੋਂ ਰੋਕਦੀ ਹੈ।

ਜਾਂਚੋ ਕਿ ਪ੍ਰਮਾਣੀਕਰਨ ਦਾ ਕਿਹੜਾ ਪੜਾਅ ਅਸਫਲ ਹੋ ਰਿਹਾ ਹੈ

ਆਮ HTTP ਪ੍ਰੌਕਸੀ ਵਰਤੋਂ ਅਤੇ CONNECT ਟਨਲਾਂ ਲਈ JDK ਵਿੱਚ ਬੰਦ ਪ੍ਰਮਾਣੀਕਰਨ ਸਕੀਮਾਂ ਦੀਆਂ ਵੱਖਰੀਆਂ ਸੈਟਿੰਗਾਂ ਹਨ। ਸੰਬੰਧਿਤ ਨਾਂ jdk.http.auth.proxying.disabledSchemes ਅਤੇ jdk.http.auth.tunneling.disabledSchemes ਹਨ।

ਇਸ ਕਾਰਨ HTTP ਟ੍ਰੈਫਿਕ ਦਾ ਪ੍ਰਮਾਣੀਕਰਨ ਸਫਲ ਹੋ ਸਕਦਾ ਹੈ ਪਰ ਉਸੇ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ HTTPS ਟਨਲ ਅਸਫਲ ਹੋ ਸਕਦੀ ਹੈ। ਦੂਜੀ ਮਸ਼ੀਨ ਉੱਤੇ ਉਹੀ ਪ੍ਰਭਾਵੀ ਮੂਲ ਸੈਟਿੰਗਾਂ ਮੰਨਣ ਦੀ ਬਜਾਏ ਰਨਟਾਈਮ ਦੀ conf/net.properties ਅਤੇ ਤੈਨਾਤੀ ਨੀਤੀ ਜਾਂਚੋ।

ਬੰਦ ਸਕੀਮਾਂ ਦੀ ਸੂਚੀ ਗਲੋਬਲ ਤੌਰ ’ਤੇ ਖਾਲੀ ਕਰਨਾ ਪ੍ਰੌਕਸੀ ਠੀਕ ਕਰਨ ਦਾ ਆਮ ਹੱਲ ਨਹੀਂ। ਬਿਨਾਂ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਾਲੀ HTTP ਪ੍ਰੌਕਸੀ ਨੂੰ ਭੇਜੇ Basic ਲੌਗਇਨ ਵੇਰਵੇ ਮੰਜ਼ਿਲ ਨਾਲ ਬਾਅਦ ਵਿੱਚ ਬਣੇ TLS ਕਨੈਕਸ਼ਨ ਨਾਲ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹੁੰਦੇ। ਤਬਦੀਲੀ ਮਨਜ਼ੂਰ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰੌਕਸੀ ਦਾ ਟਰਾਂਸਪੋਰਟ, ਪ੍ਰਮਾਣੀਕਰਨ ਢੰਗ ਅਤੇ ਤੈਨਾਤੀ ਨੀਤੀ ਵੇਖੋ।

JDK ਦੇ ਅੰਦਰੂਨੀ ਪ੍ਰਮਾਣੀਕਰਨ ਦਾ ਦਸਤਾਵੇਜ਼ੀ ਵਿਹਾਰ ਵੀ ਪ੍ਰੌਕਸੀ ਵੱਲੋਂ ਐਲਾਨੀ ਹਰ ਸਕੀਮ ਦੇ ਸਮਰਥਨ ਦਾ ਵਾਅਦਾ ਨਹੀਂ। ਹੱਥੀਂ ਦਿੱਤਾ Authorization ਜਾਂ Proxy-Authorization ਹੈਡਰ ਆਟੋਮੈਟਿਕ ਪ੍ਰਮਾਣੀਕਾਰਕ ਦਾ ਪ੍ਰਵਾਹ ਬਦਲਦਾ ਹੈ; ਇਸ ਲਈ callback ਦਾ ਵਿਹਾਰ ਉਦਾਹਰਨ ਤੋਂ ਵੱਖਰਾ ਹੋਵੇ ਤਾਂ ਕਸਟਮ ਹੈਡਰ ਜਾਂਚੋ।

ਸੰਬੰਧਿਤ ਲੇਖ