ورود به پراکسی URL در Emacs 31.1: auth-source و محدودیتهای CONNECT
یک پراکسی HTTP احراز هویتشده برای کتابخانه URL در Emacs پیکربندی کنید، جستوجوی اعتبارنامه Basic آن را بشناسید و مسیر HTTPS CONNECT را در Emacs 31.1 در نظر بگیرید.
نشانی پراکسی به Emacs میگوید کجا وصل شود. ورود آن بخش دیگری از گفتوگوست. برای یک درخواست HTTP معمولی، کتابخانه URL در Emacs میتواند به چالش احراز هویت پراکسی پاسخ دهد، اعتبارنامه را از auth-source بگیرد یا بهصورت تعاملی بپرسد، و اعتبارنامههای نگهداشتهشده در نشست را دوباره به کار ببرد.
جزئیات زیر از Emacs 31.1 پیروی میکند. آنها به عملیات با کتابخانه 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 چالش یا درگاه عددی پراکسی نیست. انتظار نداشته باشید که برای چند realm یا درگاه پراکسی روی یک نام میزبان گذرواژههای Basic متفاوت انتخاب کند. 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 برای فهم این رفتار سودمند است، اما پر کردن دستی آن ساختار داده خصوصی، پیکربندی را به جزئیات پیادهسازی گره میزند.