В конфигурацията на Jetty SPNEGO има три имена: URI за съпоставяне на удостоверяването, потребителят, който влиза чрез JAAS, и услугата, за която се иска билет. Те служат за различни цели.

За реализацията на Jetty 12.0.x фрагмент от обекта за удостоверяване изглежда така:

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

Този фрагмент илюстрира компонента на услугата, а не пълна рецепта за proxy удостоверяване. Влизането през JAAS, маршрутизирането през proxy и обменът на удостоверяване на заявката остават отделни.

В тази реализация Jetty изгражда GSS името на база хост, като комбинира getServiceName(), знака @ и хоста за обмена на удостоверяване. Ако подадете [email protected] като компонент на услугата, ще се добави още един хост. Четете договора на този сетер, вместо да предполагате, че приема пълен Kerberos principal.

Полученото GSS име има концептуалната форма HTTP@hostname. Съответният principal на услугата в KDC обикновено се представя като HTTP/hostname. избраното proxy име трябва да съответства на действително регистрираната услуга за този акаунт; IP адрес или псевдоним може да избере друга цел на билета.

Проверете и пътя за 407

В Jetty 12.0.x authenticate() получава GSS името на хоста от request.getHost() и изгражда резултат със заглавката Authorization по подразбиране. Съпоставянето на обект за удостоверяване по proxy URI само по себе си не променя тези избори към името на proxy хоста и Proxy-Authorization.

Затова една proxy интеграция се нуждае от правилния хост на заявката и резултат в обхвата на proxy за този обмен. Заявка HTTPS CONNECT и обикновена заявка към източник могат да имат различни стойности на хоста. Потвърдете поведението на инсталираната реализация, вместо да предполагате, че сетерът на името на услугата осигурява целия поток за 407.

За 407 проверявайте обмена на proxy удостоверяване и хоста, използван от тази заявка. 401 принадлежи на удостоверяването към източника. Само валиден потребителски билет не доказва, че Jetty е поискал правилния билет за услугата или че посредникът го е приел.

Подобни статии