تسجيل دخول الوكيل في Emacs 31.1: auth-source وحدود CONNECT
اضبط وكيل HTTP يتطلب مصادقة لمكتبة URL في Emacs، وافهم بحث بيانات الاعتماد Basic، واحسب مسار HTTPS CONNECT في Emacs 31.1.
يخبر عنوان الوكيل برنامج Emacs بمكان الاتصال. أما تسجيل الدخول فهو جزء آخر من المحادثة. في طلب HTTP عادي، تستطيع مكتبة URL في Emacs أن ترد على تحدّي مصادقة الوكيل، وأن تحصل على بيانات الاعتماد من auth-source أو تسأل تفاعليًا، وأن تعيد استخدام بيانات الاعتماد المحفوظة في الجلسة.
تتبع التفاصيل أدناه الإصدار 31.1 من Emacs. وهي تخص العمليات التي تستخدم مكتبة URL؛ أما أداة التنزيل الخارجية التي تطلقها حزمة Emacs فلها مسار مصادقة خاص بها.
حدّد المسار، ثم دع HTTP يطلب تسجيل الدخول
يمكن اختيار نقطة نهاية ثابتة للوكيل بالخيار الموثّق:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
استبدل العنصر النائب بنقطة النهاية التي حصلت عليها. تصف المفاتيح مخططات URL للوجهة. وإضافة مدخل HTTPS تختار مسارًا لوجهات HTTPS؛ وهي لا توفّر بيانات الاعتماد بحد ذاتها.
أثناء طلب HTTP عادي، يمكن للوكيل أن يرد بـ 407 Proxy Authentication Required وتحدٍّ من نوع Proxy-Authenticate. تختار مكتبة URL مخطط مصادقة مدعومًا وتحصل على بيانات الاعتماد لنقطة نهاية الوكيل. ثم تعيد المحاولة باستخدام Proxy-Authorization.
في مصادقة Basic، يمكن للطلب التفاعلي أن يطلب اسم مستخدم وكلمة مرور عندما لا تتوافر بيانات اعتماد مناسبة. أما الطلب المعلَّم كغير تفاعلي فلا يمكنه الاعتماد على تلك المطالبات. كما أن تسجيل دخول الوكيل منفصل عن تسجيل دخول موقع الوجهة: فتحدّي 401 الخاص بالموقع يتبع مسارًا مختلفًا.
ضع بيانات الاعتماد الدائمة في auth-source
إذا كان auth-source يقرأ بالفعل ملف بيانات اعتماد مشفّرًا مثل ~/.authinfo.gpg، فإن مدخل Basic لهذا المثال يأخذ الشكل التالي:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
استخدم حسابك وسرك الفعليين، وتأكد من أن الملف ضمن auth-sources التي أعددتها. يوضّح السطر الحقول المتطابقة؛ وهو ليس تعليمًا بوضع كلمة مرور في ملف تهيئة Lisp الخاص بك.
هناك تفصيلان مهمان في تنفيذ Basic في Emacs 31.1. فهو يبحث عن اسم مضيف الوكيل دون منفذ TCP الرقمي، ويمرّر مخطط URL الخاص بالوكيل كقيمة المنفذ لدى auth-source. في هذا الوكيل من نوع HTTP تكون تلك القيمة http، مع أن اتصال TCP يستخدم المنفذ 8080.
لا يتضمن هذا البحث realm الخاص بالتحدي ولا منفذ الوكيل الرقمي. لا تتوقع أن يختار كلمات مرور Basic مختلفة لعدة realms أو منافذ وكيل على اسم المضيف نفسه. يستخدم Digest بحثًا مختلفًا عن المضيف، لذا فالمثال أعلاه خاص بـ Basic تحديدًا.
تحتفظ مكتبة URL أيضًا بذاكرة مصادقة خاصة بها. تميّز مدخلات Basic فيها بين نقاط نهاية الوكيل وتستخدم مطابقة realm أو الدليل داخل نقطة النهاية؛ وتلك الذاكرة منفصلة عن بحث auth-source. وكتابة كلمة مرور عند المطالبة يمكن أن تملأ ذاكرة الجلسة دون حفظ مدخل جديد في ملف بيانات الاعتماد الدائم.
لمسار HTTPS خطوة مصادقة أسبق
بالنسبة إلى وجهة HTTPS عبر وكيل HTTP، يرسل Emacs أولًا CONNECT. وقد تكون المصادقة مطلوبة لذلك قبل أن يصل إلى الاتصال المشفّر بالموقع.
في Emacs 31.1، يتحقق باني طلب CONNECT من المصادقة المتاحة بالفعل عبر آلة المصادقة، بما في ذلك بيانات اعتماد Basic المخزّنة مؤقتًا. ولا يطلب مساره الخاص بـ Basic بيانات جديدة من auth-source عند تلك النقطة ولا يجلبها. كما أن استجابة CONNECT غير 200 لا تدخل معالج تحدّي HTTP 407 العادي الموصوف أعلاه.
وبالتالي، فإن مدخل auth-source القادر على الرد على تحدّي HTTP Basic عادي لا يضمن أن أول طلب HTTPS في جلسة جديدة سيتحقق بنجاح. فالجلسة التي لديها بيانات اعتماد مخزّنة مناسبة تبدأ من حالة مختلفة. ولا يمكن لتحرير المدخل نفسه مرارًا أن يزيل بحد ذاته هذا الفرق بين المسارين.
إذا توقفت عملية HTTPS عند الوكيل، فتحقق مما إذا كان CONNECT قد استلم 407، وما إذا كنت تستخدم سلوك هذا الإصدار. وتأكد أيضًا من مخطط المصادقة الذي يقدّمه الوكيل. فمدخل بيانات اعتماد Basic ليس محوّلًا شاملًا لكل نظام مصادقة مؤسسي.
احتفظ بالإعداد الدائم في خيار الوكيل العام وفي خلفية بيانات الاعتماد التي اخترتها. إن مخزن Basic الداخلي لمكتبة URL مفيد لفهم هذا السلوك، لكن ملء ذلك البنية الخاصة يدويًا سيربط الإعداد بتفاصيل التنفيذ.