Login proxy URL di Emacs 31.1: auth-source dan batas CONNECT
Konfigurasikan proxy HTTP terautentikasi untuk pustaka URL Emacs, pahami pencarian kredensial Basic-nya, dan perhitungkan jalur HTTPS CONNECT di Emacs 31.1.
Alamat proxy memberi tahu Emacs ke mana harus terhubung. Login-nya adalah bagian lain dari percakapan. Untuk permintaan HTTP biasa, pustaka URL Emacs dapat menjawab tantangan autentikasi proxy, memperoleh kredensial dari auth-source atau menanyakannya secara interaktif, dan menggunakan kembali kredensial yang disimpan dalam sesi.
Detail di bawah ini mengikuti Emacs 31.1. Detail ini menyangkut operasi yang memakai pustaka URL; pengunduh eksternal yang dijalankan paket Emacs memiliki jalur autentikasinya sendiri.
Tetapkan rutenya, lalu biarkan HTTP meminta login
Endpoint proxy tetap dapat dipilih dengan opsi yang didokumentasikan:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Ganti placeholder dengan endpoint yang diberikan. Kunci-kunci itu menjelaskan skema URL tujuan. Menambahkan entri HTTPS memilih rute untuk tujuan HTTPS; entri itu sendiri tidak memasok kredensial.
Selama permintaan HTTP biasa, proxy dapat menanggapi dengan 407 Proxy Authentication Required dan tantangan Proxy-Authenticate. Pustaka URL memilih skema autentikasi yang didukung dan memperoleh kredensial untuk endpoint proxy. Kemudian ia mencoba lagi dengan Proxy-Authorization.
Untuk autentikasi Basic, permintaan interaktif dapat menanyakan nama pengguna dan kata sandi bila kredensial yang sesuai tidak tersedia. Permintaan yang ditandai noninteraktif tidak dapat mengandalkan perintah itu. Login proxy juga terpisah dari login situs web tujuan: tantangan 401 sebuah situs web mengikuti jalur yang berbeda.
Simpan kredensial persisten di auth-source
Jika auth-source sudah membaca berkas kredensial terenkripsi seperti ~/.authinfo.gpg, entri Basic untuk contoh ini berbentuk sebagai berikut:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Gunakan akun dan rahasia Anda yang sebenarnya, dan pastikan berkas itu termasuk dalam auth-sources yang Anda konfigurasikan. Baris ini menggambarkan bidang yang cocok; itu bukan instruksi untuk menaruh kata sandi di berkas inisialisasi Lisp Anda.
Dua detail penting dalam implementasi Basic Emacs 31.1. Ia mencari nama host proxy tanpa port TCP numerik, dan meneruskan skema URL proxy sebagai nilai port auth-source. Untuk proxy HTTP ini, nilai tersebut adalah http, meskipun koneksi TCP memakai port 8080.
Pencarian ini tidak menyertakan realm tantangan atau port proxy numerik. Jangan berharap ia memilih kata sandi Basic berbeda untuk beberapa realm atau port proxy pada nama host yang sama. Digest memakai pencarian host yang berbeda, jadi contoh di atas khusus untuk Basic.
Pustaka URL juga menyimpan cache autentikasinya sendiri. Entri Basic-nya membedakan endpoint proxy dan memakai pencocokan realm atau direktori di dalam suatu endpoint; cache itu terpisah dari pencarian auth-source. Mengetik kata sandi pada prompt dapat mengisi cache sesi tanpa menyimpan entri baru di berkas kredensial persisten Anda.
HTTPS punya langkah autentikasi yang lebih awal
Untuk tujuan HTTPS melalui proxy HTTP, Emacs mengirim CONNECT lebih dahulu. Karena itu autentikasi mungkin diperlukan sebelum mencapai koneksi terenkripsi ke situs web.
Di Emacs 31.1, pembangun permintaan CONNECT memeriksa autentikasi yang sudah tersedia melalui mesin autentikasinya, termasuk kredensial Basic yang di-cache. Jalur Basic-nya tidak menanyakan atau mengambil entri auth-source baru pada titik itu. Respons CONNECT yang bukan 200 juga tidak masuk ke penangan tantangan HTTP 407 biasa yang dijelaskan di atas.
Akibatnya, entri auth-source yang dapat menjawab tantangan HTTP Basic normal tidak menjamin bahwa permintaan HTTPS pertama sebuah sesi baru akan terautentikasi dengan berhasil. Sesi dengan kredensial cache yang sesuai memiliki keadaan awal yang berbeda. Menyunting entri kata sandi yang sama berulang kali tidak dapat dengan sendirinya menghapus perbedaan ini antara kedua jalur.
Jika operasi HTTPS berhenti di proxy, pastikan apakah CONNECT menerima 407 dan apakah Anda memakai perilaku rilis ini. Pastikan juga skema autentikasi yang ditawarkan proxy. Entri kredensial Basic bukan adaptor universal untuk setiap sistem autentikasi perusahaan.
Simpan konfigurasi yang tahan lama di opsi proxy publik dan di backend kredensial pilihan Anda. Penyimpanan Basic internal pustaka URL berguna untuk memahami perilaku ini, tetapi mengisi sendiri struktur data privat itu akan mengikat penyiapan pada detail implementasi.