Início de sessão no proxy URL no Emacs 31.1: auth-source e limites do CONNECT
Configure um proxy HTTP autenticado para a biblioteca URL do Emacs, entenda a procura de credenciais Basic e considere o caminho HTTPS CONNECT no Emacs 31.1.
O endereço do proxy diz ao Emacs onde se conectar. O início de sessão é outra parte da conversa. Para um pedido HTTP comum, a biblioteca URL do Emacs pode responder a um desafio de autenticação do proxy, obter credenciais do auth-source ou perguntá-las interativamente, e reutilizar credenciais mantidas na sessão.
Os detalhes abaixo seguem o Emacs 31.1. Dizem respeito a operações que usam a biblioteca URL; um descarregador externo lançado por um pacote do Emacs tem o seu próprio caminho de autenticação.
Defina a rota e depois deixe o HTTP pedir o início de sessão
Um ponto final de proxy fixo pode ser escolhido com a opção documentada:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
Substitua o marcador de posição pelo ponto final fornecido. As chaves descrevem os esquemas de URL de destino. Acrescentar a entrada HTTPS seleciona uma rota para destinos HTTPS; por si só não fornece credenciais.
Durante um pedido HTTP comum, um proxy pode responder com 407 Proxy Authentication Required e um desafio Proxy-Authenticate. A biblioteca URL escolhe um esquema de autenticação suportado e obtém credenciais para o ponto final do proxy. Em seguida, tenta novamente com Proxy-Authorization.
Na autenticação Basic, um pedido interativo pode pedir um nome de utilizador e uma palavra-passe quando não há credenciais adequadas disponíveis. Um pedido marcado como não interativo não pode contar com essas perguntas. O início de sessão no proxy também é separado do início de sessão no site de destino: o desafio 401 de um site segue um caminho diferente.
Coloque credenciais persistentes no auth-source
Se o auth-source já lê um ficheiro de credenciais encriptado como ~/.authinfo.gpg, uma entrada Basic para este exemplo tem a seguinte forma:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
Use a sua conta e segredo reais e certifique-se de que o ficheiro está entre os auth-sources configurados. A linha ilustra os campos correspondentes; não é uma instrução para colocar uma palavra-passe no seu ficheiro de inicialização Lisp.
Dois detalhes importam na implementação Basic do Emacs 31.1. Procura o nome do anfitrião do proxy sem a porta TCP numérica e passa o esquema do URL do proxy como valor de porta do auth-source. Para este proxy HTTP, esse valor é http, embora a ligação TCP use a porta 8080.
Esta procura não inclui o realm do desafio nem a porta numérica do proxy. Não espere que selecione palavras-passe Basic diferentes para vários realms ou portas de proxy no mesmo nome de anfitrião. O Digest usa uma procura de anfitrião diferente, pelo que o exemplo acima é especificamente para Basic.
A biblioteca URL também mantém a sua própria cache de autenticação. As suas entradas Basic distinguem pontos finais de proxy e usam correspondência de realm ou de diretório dentro de um ponto final; essa cache é separada da procura no auth-source. Escrever uma palavra-passe num pedido pode preencher a cache da sessão sem guardar uma nova entrada no seu ficheiro de credenciais persistente.
O HTTPS tem um passo de autenticação anterior
Para um destino HTTPS através de um proxy HTTP, o Emacs envia primeiro CONNECT. A autenticação pode, por isso, ser necessária antes de chegar à ligação encriptada ao site.
No Emacs 31.1, o construtor do pedido CONNECT verifica a autenticação já disponível através do seu mecanismo de autenticação, incluindo credenciais Basic em cache. O seu caminho Basic não pede nem obtém uma nova entrada do auth-source nesse momento. Uma resposta CONNECT diferente de 200 também não entra no tratamento normal do desafio HTTP 407 descrito acima.
Por conseguinte, uma entrada do auth-source capaz de responder a um desafio HTTP Basic normal não garante que o primeiro pedido HTTPS de uma nova sessão seja autenticado com sucesso. Uma sessão com credenciais adequadas em cache tem um estado inicial diferente. Editar repetidamente a mesma entrada de palavra-passe não pode, por si só, eliminar esta diferença entre os dois caminhos.
Se uma operação HTTPS parar no proxy, determine se o CONNECT recebeu 407 e se está a usar o comportamento desta versão. Confirme também o esquema de autenticação oferecido pelo proxy. Uma entrada de credenciais Basic não é um adaptador universal para todos os sistemas de autenticação empresarial.
Mantenha a configuração duradoura na opção pública do proxy e no backend de credenciais que escolheu. O armazenamento Basic interno da biblioteca URL é útil para compreender este comportamento, mas preencher à mão essa estrutura de dados privada ligaria a configuração a detalhes de implementação.