Inicio de sesión del proxy URL en Emacs 31.1: auth-source y límites de CONNECT
Configure un proxy HTTP autenticado para la biblioteca URL de Emacs, comprenda su búsqueda de credenciales Basic y tenga en cuenta la ruta HTTPS CONNECT en Emacs 31.1.
La dirección del proxy indica a Emacs dónde conectarse. Su inicio de sesión es otra parte de la conversación. Para una solicitud HTTP ordinaria, la biblioteca URL de Emacs puede responder a un desafío de autenticación del proxy, obtener credenciales de auth-source o preguntarlas de forma interactiva, y reutilizar las credenciales mantenidas en la sesión.
Los detalles siguientes corresponden a Emacs 31.1. Se refieren a operaciones que usan la biblioteca URL; un descargador externo lanzado por un paquete de Emacs tiene su propia ruta de autenticación.
Defina la ruta y deje que HTTP pida el inicio de sesión
Se puede seleccionar un extremo de proxy fijo con la opción documentada:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Sustituya el marcador de posición por el extremo proporcionado. Las claves describen los esquemas de URL de destino. Añadir la entrada HTTPS selecciona una ruta para destinos HTTPS; por sí misma no proporciona credenciales.
Durante una solicitud HTTP ordinaria, un proxy puede responder con 407 Proxy Authentication Required y un desafío Proxy-Authenticate. La biblioteca URL elige un esquema de autenticación admitido y obtiene credenciales para el extremo del proxy. Luego reintenta con Proxy-Authorization.
En la autenticación Basic, una solicitud interactiva puede pedir un nombre de usuario y una contraseña cuando no haya credenciales adecuadas disponibles. Una solicitud marcada como no interactiva no puede depender de esas peticiones. El inicio de sesión del proxy también es independiente del inicio de sesión del sitio web de destino: el desafío 401 de un sitio web sigue una ruta diferente.
Guarde las credenciales persistentes en auth-source
Si auth-source ya lee un archivo de credenciales cifrado como ~/.authinfo.gpg, una entrada Basic para este ejemplo tiene la forma siguiente:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Utilice su cuenta y secreto reales, y asegúrese de que el archivo esté entre sus auth-sources configurados. La línea ilustra los campos coincidentes; no es una instrucción para poner una contraseña en su archivo de inicialización de Lisp.
Dos detalles importan en la implementación Basic de Emacs 31.1. Busca el nombre de host del proxy sin el puerto TCP numérico y pasa el esquema de la URL del proxy como valor de puerto de auth-source. Para este proxy HTTP, ese valor es http, aunque la conexión TCP use el puerto 8080.
Esta búsqueda no incluye el realm del desafío ni el puerto numérico del proxy. No espere que seleccione contraseñas Basic diferentes para varios realms o puertos de proxy en el mismo nombre de host. Digest utiliza una búsqueda de host distinta, así que el ejemplo anterior es específicamente para Basic.
La biblioteca URL también mantiene su propia caché de autenticación. Sus entradas Basic distinguen los extremos del proxy y usan coincidencia de realm o de directorio dentro de un extremo; esa caché es independiente de la búsqueda en auth-source. Escribir una contraseña en un aviso puede llenar la caché de la sesión sin guardar una entrada nueva en su archivo de credenciales persistente.
HTTPS tiene un paso de autenticación anterior
Para un destino HTTPS a través de un proxy HTTP, Emacs envía primero CONNECT. Por lo tanto, la autenticación puede ser necesaria antes de llegar a la conexión cifrada con el sitio web.
En Emacs 31.1, el generador de solicitudes CONNECT comprueba la autenticación ya disponible mediante su maquinaria de autenticación, incluidas las credenciales Basic almacenadas en caché. Su ruta Basic no pregunta ni obtiene una entrada nueva de auth-source en ese momento. Una respuesta CONNECT distinta de 200 tampoco entra en el manejador de desafíos HTTP 407 ordinario descrito arriba.
En consecuencia, una entrada de auth-source que puede responder a un desafío HTTP Basic normal no garantiza que la primera solicitud HTTPS de una sesión nueva se autentique correctamente. Una sesión con credenciales en caché adecuadas tiene un estado inicial diferente. Editar repetidamente la misma entrada de contraseña no puede por sí solo eliminar esta diferencia entre las dos rutas.
Si una operación HTTPS se detiene en el proxy, determine si CONNECT recibió 407 y si está usando el comportamiento de esta versión. Confirme también el esquema de autenticación que ofrece el proxy. Una entrada de credenciales Basic no es un adaptador universal para todos los sistemas de autenticación empresarial.
Mantenga la configuración duradera en la opción pública del proxy y en el backend de credenciales que haya elegido. El almacenamiento Basic interno de la biblioteca URL es útil para entender este comportamiento, pero rellenar a mano esa estructura de datos privada ataría la configuración a detalles de implementación.