Пружина SPNEGO без формы
У меня есть несколько вопросов о настройке SPNEGO без использования формы.
Я пишу веб-сервис, который использует аутентификацию SPNEGO и возвращает подписанный JWT для аутентифицированного участника. Я не использую формы (например, не могу использовать формы с принципами только аутентификации).
- Могу ли я пропустить части formLogin() и logout(), как показано в весенней ссылке SPNEGO, и использовать конструктор SpnegoEntryPoint с нулевым аргументом?
- Судя по источнику фильтра SPNEGO, кажется, что если отсутствует заголовок Authorization, тогда фильтр на самом деле не возвращает несанкционированный ответ 401 с запросом WWW-Authenticate: Negotiate для вызывающей стороны. То есть нет
else
на проверку по строке 135. Я правильно читаю? RFC заявляетЕсли сервер получает запрос на объект, защищенный от доступа, и если приемлемый заголовок авторизации не был отправлен, сервер отвечает кодом состояния "401 Unauthorized" и заголовком "WWW- Authenticate:"
- Если вышеприведенное верно, ожидают ли клиенты преимущественной отправки заголовка авторизации?
Спасибо!
РЕДАКТИРОВАТЬ (и, вероятно, РАЗРЕШЕНО): мой оригинальный конфигурационный файл безопасности имел:
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 ответ
- Да, нулевой аргумент cosntructor является правильным.
- Фильтр не несет ответственности за настройку статуса и заголовка. SpnegoEntryPoint есть. org.springframework.security.kerberos.web.authentication.SpnegoEntryPoint.commence(HttpServletRequest, HttpServletResponse, AuthenticationException)
- Нет, см. 2.