Пружина SPNEGO без формы

У меня есть несколько вопросов о настройке SPNEGO без использования формы.

Я пишу веб-сервис, который использует аутентификацию SPNEGO и возвращает подписанный JWT для аутентифицированного участника. Я не использую формы (например, не могу использовать формы с принципами только аутентификации).

  1. Могу ли я пропустить части formLogin() и logout(), как показано в весенней ссылке SPNEGO, и использовать конструктор SpnegoEntryPoint с нулевым аргументом?
  2. Судя по источнику фильтра SPNEGO, кажется, что если отсутствует заголовок Authorization, тогда фильтр на самом деле не возвращает несанкционированный ответ 401 с запросом WWW-Authenticate: Negotiate для вызывающей стороны. То есть нет else на проверку по строке 135. Я правильно читаю? RFC заявляет

    Если сервер получает запрос на объект, защищенный от доступа, и если приемлемый заголовок авторизации не был отправлен, сервер отвечает кодом состояния "401 Unauthorized" и заголовком "WWW- Authenticate:"

  3. Если вышеприведенное верно, ожидают ли клиенты преимущественной отправки заголовка авторизации?

Спасибо!

РЕДАКТИРОВАТЬ (и, вероятно, РАЗРЕШЕНО): мой оригинальный конфигурационный файл безопасности имел:

http.exceptionHandling()
    .authenticationEntryPoint(spnegoEntryPoint())
    .and()
.authorizeRequests()
    .antMatchers("/v1/**").permitAll()
    .anyRequest().authenticated()
    .and()
.addFilterBefore()...`

Когда я удаляю .antMatchers("/v1/**").permitAll() включается SpnegoEntryPoint, и теперь я вижу 401 с WWW-Authenticate: согласовать ответ.

Конечно, теперь я получаю Server not found in Kerberos database Ошибка gss_init_sec_context(), но я подозреваю, что это связано с настройкой SPN или разрешением имени хоста (так как я тестирую это локально на моем Macbook), чем приложение Spring.

Будет обновляться один раз, наконец, когда я получу это работает.

1 ответ

  1. Да, нулевой аргумент cosntructor является правильным.
  2. Фильтр не несет ответственности за настройку статуса и заголовка. SpnegoEntryPoint есть. org.springframework.security.kerberos.web.authentication.SpnegoEntryPoint.commence(HttpServletRequest, HttpServletResponse, AuthenticationException)
  3. Нет, см. 2.
Другие вопросы по тегам