ที่อยู่ของพร็อกซีบอก 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 ของคำท้าทายหรือพอร์ตพร็อกซีแบบตัวเลข อย่าคาดหวังว่าจะเลือกรหัสผ่าน Basic ที่แตกต่างกันสำหรับหลาย realm หรือพอร์ตพร็อกซีบนชื่อโฮสต์เดียวกัน 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 มีประโยชน์ในการทำความเข้าใจพฤติกรรมนี้ แต่การเติมโครงสร้างข้อมูลส่วนตัวนั้นด้วยมือจะผูกการตั้งค่าเข้ากับรายละเอียดการใช้งาน

บทความที่เกี่ยวข้อง