Jetty 12.0.x SPNEGO: defina o nome do serviço, não o principal completo
Separe o URI do proxy, o usuário JAAS e o componente de serviço GSS ao configurar a autenticação do Jetty 12.
Numa configuração SPNEGO do Jetty há três nomes: o URI usado para corresponder a autenticação, o usuário que inicia sessão através de JAAS e o serviço para o qual é pedido um bilhete. Têm finalidades diferentes.
Para a implementação do Jetty 12.0.x, um fragmento do objeto de autenticação é:
var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");Este fragmento ilustra o componente de serviço, não uma receita completa de autenticação de proxy. O início de sessão JAAS, o encaminhamento do proxy e a troca de autenticação do pedido continuam separados.
Nesta implementação, o Jetty constrói o nome GSS baseado no anfitrião combinando getServiceName(), o carácter @ e o anfitrião da troca de autenticação. Fornecer [email protected] como componente de serviço acrescentaria outro anfitrião. Leia o contrato deste setter em vez de presumir que aceita um principal Kerberos completo.
O nome GSS resultante tem a forma conceptual HTTP@hostname. O principal de serviço correspondente do KDC é normalmente representado como HTTP/hostname. O nome de proxy selecionado tem de corresponder ao serviço realmente registado para essa conta; um endereço IP ou alias pode selecionar outro alvo de bilhete.
Inspecione também o caminho 407
No Jetty 12.0.x, authenticate() obtém o nome de anfitrião GSS de request.getHost() e constrói um resultado com o cabeçalho Authorization predefinido. Corresponder um objeto de autenticação por URI de proxy não altera por si só essas escolhas para o nome de anfitrião do proxy e Proxy-Authorization.
Por isso, uma integração de proxy precisa do anfitrião de pedido correto e de um resultado com âmbito de proxy para essa troca. Um pedido HTTPS CONNECT e um pedido de origem comum podem ter valores de anfitrião diferentes. Confirme o comportamento da implementação instalada em vez de presumir que o setter do nome do serviço fornece o fluxo 407 completo.
Para um 407, inspecione a troca de autenticação do proxy e o anfitrião usado por esse pedido. Um 401 pertence à autenticação de origem. Um bilhete de utilizador válido por si só não prova que o Jetty pediu o bilhete de serviço correto nem que o intermediário o aceitou.