Jetty 12.0.x SPNEGO: Den Dienstnamen setzen, nicht den vollständigen Principal
Trennen Sie Proxy-URI, JAAS-Benutzer und GSS-Dienstkomponente bei der Konfiguration der Jetty-12-Authentifizierung.
In einer Jetty-SPNEGO-Konfiguration gibt es drei Namen: die URI zur Zuordnung der Authentifizierung, den Benutzer, der sich über JAAS anmeldet, und den Dienst, für den ein Ticket angefordert wird. Sie dienen unterschiedlichen Zwecken.
Für die Implementierung in Jetty 12.0.x sieht ein Ausschnitt des Authentifizierungsobjekts so aus:
var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");Dieser Ausschnitt zeigt die Dienstkomponente, nicht ein vollständiges Rezept für die Proxy-Authentifizierung. JAAS-Anmeldung, Proxy-Routing und der Authentifizierungsaustausch der Anfrage bleiben getrennt.
In dieser Implementierung bildet Jetty den hostbasierten GSS-Namen, indem getServiceName(), ein @-Zeichen und der Host für den Authentifizierungsaustausch kombiniert werden. Wird [email protected] als Dienstkomponente angegeben, käme ein weiterer Host hinzu. Lesen Sie den Vertrag dieses Setters, statt anzunehmen, er akzeptiere einen vollständigen Kerberos-Principal.
Der resultierende GSS-Name hat die konzeptionelle Form HTTP@hostname. Der entsprechende Dienst-Principal im KDC wird üblicherweise als HTTP/hostname dargestellt. Der ausgewählte Proxy-Name muss zum tatsächlich registrierten Dienst passen für dieses Konto; eine IP-Adresse oder ein Alias kann ein anderes Ticketziel auswählen.
Prüfen Sie auch den 407-Pfad
In Jetty 12.0.x bezieht authenticate() den GSS-Hostnamen aus request.getHost() und bildet ein Ergebnis mit dem Standard-Header Authorization. Das Zuordnen eines Authentifizierungsobjekts über die Proxy-URI ändert diese Entscheidungen nicht von selbst in den Hostnamen des Proxys und Proxy-Authorization.
Eine Proxy-Integration benötigt daher den richtigen Anfragehost und ein proxybezogenes Ergebnis für diesen Austausch. Eine HTTPS-CONNECT-Anfrage und eine gewöhnliche Ursprungsanfrage können unterschiedliche Hostwerte haben. Prüfen Sie das Verhalten der installierten Implementierung, statt anzunehmen, der Dienstnamen-Setter liefere den vollständigen 407-Ablauf.
Bei einem 407 untersuchen Sie den Proxy-Authentifizierungsaustausch und den von dieser Anfrage verwendeten Host. Ein 401 gehört zur Ursprungsauthentifizierung. Ein gültiges Benutzerticket allein belegt nicht, dass Jetty das richtige Dienstticket angefordert hat oder dass die Zwischenstelle es akzeptiert hat.