Jetty 12.0.x SPNEGO: impostare il nome del servizio, non il principal completo
Separare l'URI del proxy, l'utente JAAS e il componente di servizio GSS durante la configurazione dell'autenticazione Jetty 12.
In una configurazione SPNEGO di Jetty ci sono tre nomi: l'URI usato per far corrispondere l'autenticazione, l'utente che accede tramite JAAS e il servizio per cui viene richiesto un ticket. Hanno scopi diversi.
Per l'implementazione Jetty 12.0.x, un frammento dell'oggetto di autenticazione è:
var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");Questo frammento illustra il componente di servizio, non una ricetta completa per l'autenticazione proxy. Accesso JAAS, instradamento del proxy e scambio di autenticazione della richiesta restano separati.
In questa implementazione Jetty costruisce il nome GSS basato sull'host combinando getServiceName(), il carattere @ e l'host dello scambio di autenticazione. Fornire [email protected] come componente di servizio aggiungerebbe un altro host. Leggere il contratto di questo setter invece di presumere che accetti un principal Kerberos completo.
Il nome GSS risultante ha la forma concettuale HTTP@hostname. Il principal di servizio corrispondente del KDC è solitamente rappresentato come HTTP/hostname. Il nome proxy selezionato deve corrispondere al servizio effettivamente registrato per quell'account; un indirizzo IP o un alias possono selezionare un'altra destinazione del ticket.
Esaminare anche il percorso 407
In Jetty 12.0.x authenticate() ottiene il nome host GSS da request.getHost() e costruisce un risultato con l'intestazione Authorization predefinita. Far corrispondere un oggetto di autenticazione per URI del proxy non cambia di per sé queste scelte nel nome host del proxy e in Proxy-Authorization.
Un'integrazione proxy ha quindi bisogno dell'host di richiesta corretto e di un risultato con ambito proxy per quello scambio. Una richiesta HTTPS CONNECT e una normale richiesta all'origine possono avere valori di host diversi. Verificare il comportamento dell'implementazione installata invece di presumere che il setter del nome del servizio fornisca il flusso 407 completo.
Per un 407, esaminare lo scambio di autenticazione del proxy e l'host usato da quella richiesta. Un 401 appartiene all'autenticazione dell'origine. Un ticket utente valido da solo non dimostra che Jetty abbia richiesto il ticket di servizio corretto né che l'intermediario lo abbia accettato.