В конфигурации 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] в качестве компонента службы, будет добавлен ещё один хост. Читайте контракт этого setter, а не предполагайте, что он принимает полный principal Kerberos.

Полученное 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 и обычный запрос к источнику могут иметь разные значения хоста. Проверьте поведение установленной реализации, а не предполагайте, что setter имени службы обеспечивает весь поток 407.

Для 407 проверьте обмен аутентификации proxy и хост, использованный этим запросом. 401 относится к аутентификации источника. Только действительный билет пользователя не доказывает, что Jetty запросил правильный билет службы или что посредник его принял.

Похожие статьи