Կրկնվող 407-ը միշտ չէ, որ նշանակում է՝ Java-ն սխալ գաղտնաբառ է ուղարկել։ JDK-ի հղումային իրականացումը սովորաբար անջատում է Basic նույնականացումը HTTPS CONNECT թունելների համար։ Միայն Basic առաջարկող պրոքսին կարող է մերժվել մինչև նույնականացման հետադարձ կանչը մուտքի տվյալներ տրամադրի։

Սահմանափակեք մուտքի տվյալների հետադարձ կանչի տիրույթը

Authenticator կցեք Java HTTP հաճախորդին և սահմանափակեք այն կարգավորված պրոքսիով․

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

Սա մեկ հաճախորդի կարգավորման կոդ է, ոչ թե համընդհանուր լռելյայն նույնականացնող։ Փոխարինեք փաստաթղթային հասցեն և օգտագործեք հենց այդ ծառայության համար իրականում տրամադրված մուտքի տվյալները։ Հարցնողի տեսակի և վերջնակետի ստուգումները կանխում են, որ նույն հետադարձ կանչն անզգուշորեն պրոքսիի հաշիվն առաջարկի կայքի նույնականացման պահանջին ի պատասխան։

Ստուգեք, թե նույնականացման որ փուլն է ձախողվում

JDK-ն ունի անջատված սխեմաների առանձին կարգավորումներ սովորական HTTP պրոքսիացման և CONNECT թունելների համար։ Համապատասխան անուններն են jdk.http.auth.proxying.disabledSchemes և jdk.http.auth.tunneling.disabledSchemes։

Սա բացատրում է, թե ինչու HTTP տրաֆիկի նույնականացումը կարող է հաջողվել, իսկ նույն պրոքսիով HTTPS թունելը՝ ձախողվել։ Ստուգեք գործարկման միջավայրի conf/net.properties-ը և տեղակայման քաղաքականությունը՝ փոխանակ ենթադրելու, որ այլ համակարգչում նույն գործող լռելյայն արժեքներն են։

Անջատված սխեմաների ցանկը համընդհանուր դատարկելը պրոքսիի ընդհանուր շտկում չէ։ Չգաղտնագրված HTTP պրոքսիին ուղարկված Basic մուտքի տվյալները չեն պաշտպանվում նպատակակետի հետ հետագայում ստեղծվող TLS կապով։ Փոփոխությունը հաստատելուց առաջ վերանայեք պրոքսիի տրանսպորտը, նույնականացման եղանակը և տեղակայման քաղաքականությունը։

JDK-ի ներկառուցված նույնականացման փաստաթղթավորված վարքագիծը նույնպես չի խոստանում աջակցել պրոքսիի հայտարարած ամեն սխեմայի։ Ձեռքով տրված Authorization կամ Proxy-Authorization վերնագիրը փոխում է ավտոմատ նույնականացնողի ընթացքը, ուստի ստուգեք հատուկ վերնագրերը, երբ հետադարձ կանչը գործում է օրինակից տարբեր։

Առնչվող հոդվածներ