Jetty 12.0.x SPNEGO: stel de servicenaam in, niet de volledige principal
Scheid de proxy-URI, de JAAS-gebruiker en de GSS-servicecomponent bij het configureren van Jetty 12-authenticatie.
In een Jetty SPNEGO-configuratie zijn er drie namen: de URI die wordt gebruikt om authenticatie te matchen, de gebruiker die inlogt via JAAS en de service waarvoor een ticket wordt aangevraagd. Ze dienen verschillende doelen.
Voor de Jetty 12.0.x-implementatie ziet een fragment van een authenticatieobject er zo uit:
var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");Dit fragment illustreert de servicecomponent, niet een volledig recept voor proxy-authenticatie. JAAS-login, proxy-routering en de authenticatie-uitwisseling van het verzoek blijven gescheiden.
In deze implementatie bouwt Jetty de GSS-hostnaam door getServiceName(), een @-teken en de host voor de authenticatie-uitwisseling te combineren. Wordt [email protected] als servicecomponent opgegeven, dan komt er nog een host bij. Lees het contract van deze setter in plaats van aan te nemen dat hij een volledige Kerberos-principal accepteert.
De resulterende GSS-naam heeft de conceptuele vorm HTTP@hostname. De overeenkomstige service-principal van de KDC wordt meestal weergegeven als HTTP/hostname. De gekozen proxy-naam moet overeenkomen met de service die daadwerkelijk is geregistreerd voor dat account; een IP-adres of alias kan een ander ticketdoel kiezen.
Onderzoek ook het 407-pad
In Jetty 12.0.x haalt authenticate() de GSS-hostnaam uit request.getHost() en bouwt een resultaat met de standaardheader Authorization. Het matchen van een authenticatieobject op proxy-URI verandert die keuzes niet vanzelf in de hostnaam van de proxy en Proxy-Authorization.
Een proxy-integratie heeft daarom de juiste verzoekhost en een proxy-gebonden resultaat nodig voor die uitwisseling. Een HTTPS CONNECT-verzoek en een gewoon oorsprongsverzoek kunnen verschillende hostwaarden hebben. Controleer het gedrag van de geïnstalleerde implementatie in plaats van aan te nemen dat de servicenaam-setter de volledige 407-stroom levert.
Onderzoek voor een 407 de proxy-authenticatie-uitwisseling en de host die dat verzoek gebruikte. Een 401 hoort bij oorsprongsauthenticatie. Een geldig gebruikersticket alleen bewijst niet dat Jetty het juiste serviceticket heeft aangevraagd of dat de tussenpartij het heeft geaccepteerd.