En una configuración SPNEGO de Jetty hay tres nombres: el URI que se usa para emparejar la autenticación, el usuario que inicia sesión mediante JAAS y el servicio para el que se solicita un ticket. Tienen propósitos distintos.

Para la implementación de Jetty 12.0.x, un fragmento del objeto de autenticación es:

var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
    java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");

Este fragmento ilustra el componente de servicio, no una receta completa de autenticación de proxy. El inicio de sesión JAAS, el enrutamiento del proxy y el intercambio de autenticación de la solicitud siguen siendo independientes.

En esta implementación, Jetty construye el nombre GSS basado en el host combinando getServiceName(), el carácter @ y el host del intercambio de autenticación. Si se proporciona [email protected] como componente de servicio, se añadiría otro host. Lea el contrato de este setter en lugar de suponer que acepta un principal Kerberos completo.

El nombre GSS resultante tiene la forma conceptual HTTP@hostname. El principal de servicio correspondiente del KDC suele representarse como HTTP/hostname. El nombre de proxy seleccionado debe coincidir con el servicio realmente registrado para esa cuenta; una dirección IP o un alias pueden seleccionar otro destino de ticket.

Inspeccione también la ruta del 407

En Jetty 12.0.x, authenticate() obtiene el nombre de host GSS de request.getHost() y construye un resultado con la cabecera Authorization predeterminada. Emparejar un objeto de autenticación por URI de proxy no cambia por sí solo esas elecciones al nombre de host del proxy y a Proxy-Authorization.

Por tanto, una integración de proxy necesita el host de solicitud correcto y un resultado con alcance de proxy para ese intercambio. Una solicitud HTTPS CONNECT y una solicitud de origen ordinaria pueden tener valores de host distintos. Confirme el comportamiento de la implementación instalada en lugar de suponer que el setter del nombre del servicio proporciona el flujo 407 completo.

Para un 407, inspeccione el intercambio de autenticación del proxy y el host que utilizó esa solicitud. Un 401 pertenece a la autenticación de origen. Un ticket de usuario válido por sí solo no demuestra que Jetty haya solicitado el ticket de servicio correcto ni que el intermediario lo haya aceptado.

Artículos relacionados