أخطاء الوكيل 407 في Java: تحقق من مصادقة Basic لاتصالات CONNECT
احصر بيانات اعتماد Java في الوكيل المقصود، وتحقق من سياسة JDK المنفصلة لمصادقة Basic في أنفاق HTTPS CONNECT.
تكرار 407 لا يعني دائمًا أن Java أرسلت كلمة مرور خاطئة. فالتنفيذ المرجعي لـJDK يعطّل عادةً مصادقة Basic لإنشاء أنفاق HTTPS CONNECT. وقد يُرفض وكيل لا يقدم سوى Basic قبل أن توفر دالة رد النداء للمصادقة بيانات الاعتماد.
احصر نطاق دالة رد النداء لبيانات الاعتماد
اربط Authenticator بـعميل HTTP في Java واقصره على الوكيل المضبوط:
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 في بيئة التشغيل ومن سياسة النشر بدلًا من افتراض أن جهازًا آخر يستخدم القيم الافتراضية الفعلية نفسها.
إفراغ قائمة مخططات المصادقة المعطلة على المستوى العام ليس إصلاحًا شاملًا للوكيل. فبيانات اعتماد Basic المرسلة إلى وكيل HTTP بنص صريح لا يحميها اتصال TLS الذي يُنشأ لاحقًا مع الوجهة. راجع وسيلة النقل إلى الوكيل وطريقة المصادقة وسياسة النشر قبل الموافقة على أي تغيير.
كذلك لا يعد السلوك الموثق للمصادقة المدمجة في JDK بدعم كل مخطط يعلنه الوكيل. فتقديم ترويسة Authorization أو Proxy-Authorization يدويًا يغير تدفق أداة المصادقة التلقائية؛ لذا افحص الترويسات المخصصة عندما يختلف سلوك دالة رد النداء عن المثال.