Может кто-нибудь помочь объяснить, что мне не хватает? У меня проблема с завитком
curl -i --negotiate -u : "backendService.net/kerberos:"
Работает нормально в CMD, и я могу проверить, какой пользователь вызвал этот в моей серверной службе. Однако, если я попробую это в postman/EDGE или Chrome. Я даже попросил интерфейс попробовать вызвать это из реакции с заголовками:
WWW-Authentication:negotiate
Я понимаю, что проверка Kerberos не удалась.
Я использую приложение весенней загрузки, и это backendService.net/kerberos
, упомянутое выше, является конечной точкой для RestController, где у меня есть:
@GetMapping(value = "/kerberos")
public ResponseEntity<String> getKerberosUser(HttpServletRequest req) {
logger.info("Kerberos remote user: " + req.getRemoteUser());
return new ResponseEntity<>(req.getRemoteUser(), HttpStatus.OK);
}
У меня правильно настроены keytab и SPN, потому что, если я попытаюсь вызвать это в cmd:
knit -k -t my-file.keytab HTTP/backendService.net
Он генерирует билет kerberos с моим именем пользователя.
Самая любопытная часть для меня, почему CURL работает, а не БРАУЗЕР или что-то еще? Любая обратная связь приветствуется. Спасибо!!! :)
Обновление 1.0
Я обнаружил, что включение поиска DisableAuthNegotiateCnameLookup
cname в Chrome решит эту проблему. Можно ли отключить его с помощью приложения spring-boot или мне нужно добавить этот URL-адрес в доверенный uri?
Если кто сталкивался с этой проблемой. Я решил это, добавив DNS-имя в файл keytab и создав SPN для того же DNS. Проблема заключалась в поиске DNS, поскольку он все время выдавал неверный URL-адрес домена. Вот почему аутентификация Kerberos не удалась.