Jetty 12.0.x SPNEGO: a szolgáltatásnevet állítsa be, ne a teljes principalt
A Jetty 12 hitelesítés konfigurálásakor válassza külön a proxy URI-t, a JAAS-felhasználót és a GSS szolgáltatáskomponenst.
A Jetty SPNEGO konfigurációjában három név szerepel: a hitelesítés párosítására szolgáló URI, a JAAS-on keresztül bejelentkező felhasználó és a szolgáltatás, amelyhez jegyet kérnek. Ezek különböző célokat szolgálnak.
A Jetty 12.0.x implementációjában a hitelesítési objektum egy részlete így néz ki:
var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");Ez a részlet a szolgáltatáskomponenst szemlélteti, nem a proxyhitelesítés teljes receptjét. A JAAS-bejelentkezés, a proxy útvonalválasztása és a kérés hitelesítési cseréje továbbra is különválik.
Ebben az implementációban a Jetty a getServiceName(), az @ karakter és a hitelesítési csere hosztjának összefűzésével építi fel a GSS hosztalapú nevet. Ha a [email protected] kerül szolgáltatáskomponensként megadásra, az újabb hosztot fűzne hozzá. Olvassa el a setter szerződését, ahelyett hogy feltételezné, hogy teljes Kerberos principalt fogad el.
Az eredményül kapott GSS-név fogalmi formája HTTP@hostname. A KDC megfelelő szolgáltatás-principalja általában HTTP/hostname formában jelenik meg. A kiválasztott proxy névnek meg kell egyeznie a ténylegesen regisztrált szolgáltatással ehhez a fiókhoz; egy IP-cím vagy alias másik jegycélt választhat.
Vizsgálja meg a 407-es útvonalat is
A Jetty 12.0.x-ben az authenticate() a request.getHost()-ból szerzi be a GSS hosztnevet, és az alapértelmezett Authorization fejléccel épít eredményt. A hitelesítési objektum proxy URI szerinti párosítása önmagában nem változtatja meg ezeket a választásokat a proxy hosztnevére és a Proxy-Authorization-re.
Ezért a proxyintegrációnak a helyes kérés-hosztra és a proxyra korlátozott eredményre van szüksége ehhez a cseréhez. Egy HTTPS CONNECT kérés és egy közönséges eredetkérés hosztértéke eltérhet. Erősítse meg a telepített implementáció viselkedését, ahelyett hogy feltételezné, hogy a szolgáltatásnév-setter a teljes 407-es folyamatot biztosítja.
407 esetén vizsgálja meg a proxyhitelesítési cserét és a kérés által használt hosztot. A 401 az eredet hitelesítéséhez tartozik. Egy érvényes felhasználói jegy önmagában nem bizonyítja, hogy a Jetty a megfelelő szolgáltatásjegyet kérte, vagy hogy a közvetítő elfogadta azt.