407 inayojirudia haimaanishi kila mara kwamba Java ilituma nenosiri lisilo sahihi. Utekelezaji rejea wa JDK kwa kawaida huzima uthibitishaji wa Basic kwa handaki za HTTPS CONNECT. Proksi inayotoa Basic pekee inaweza kukataliwa kabla callback yako ya uthibitishaji haijatoa vitambulisho.

Weka mipaka ya callback ya vitambulisho

Ambatisha Authenticator kwa kiteja cha HTTP cha Java na uiwekee mpaka wa proksi iliyosanidiwa:

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

Huu ni msimbo wa kusanidi kiteja kimoja, si kithibitishaji chaguomsingi cha mfumo mzima. Badilisha anwani ya nyaraka na utumie vitambulisho vilivyotolewa kweli kwa huduma hiyo. Ukaguzi wa aina ya mwombaji na kituo cha mwisho huzuia callback hiyo kutoa akaunti ya proksi bila tahadhari inapoitikiwa changamoto ya uthibitishaji kutoka tovuti.

Kagua hatua ya uthibitishaji inayoshindwa

JDK ina mipangilio tofauti ya mifumo ya uthibitishaji iliyozimwa kwa trafiki ya kawaida ya HTTP kupitia proksi na kwa handaki za CONNECT. Majina husika ni jdk.http.auth.proxying.disabledSchemes na jdk.http.auth.tunneling.disabledSchemes.

Hii inaeleza kwa nini trafiki ya HTTP inaweza kuthibitishwa huku handaki la HTTPS kupitia proksi hiyohiyo likishindwa. Kagua conf/net.properties ya mazingira ya utekelezaji na sera ya usambazaji badala ya kudhani kompyuta nyingine ina chaguomsingi zinazotumika sawa.

Kuondoa orodha ya mifumo iliyozimwa katika mfumo mzima si suluhisho la jumla la proksi. Vitambulisho vya Basic vinavyotumwa kwa proksi ya HTTP isiyosimbwa havilindwi na muunganisho wa TLS na lengwa unaokuja baadaye. Pitia usafirishaji wa proksi, njia ya uthibitishaji na sera ya usambazaji kabla ya kuidhinisha mabadiliko.

Tabia iliyoandikwa ya uthibitishaji uliojengewa ndani wa JDK pia si ahadi ya kuunga mkono kila mfumo unaotangazwa na proksi. Kichwa cha Authorization au Proxy-Authorization kinachowekwa mwenyewe hubadili mtiririko wa kithibitishaji otomatiki, kwa hiyo kagua vichwa maalumu callback inapotenda tofauti na mfano.

Makala zinazohusiana