通过curl进行Kerberos身份验证是可行的,但不适用于浏览器



有人能帮我解释一下我遗漏了什么吗?我有一个问题卷曲

curl -i --negotiate -u : "backendService.net/kerberos:"

在CMD中运行良好,我能够验证是哪个用户在我的后端服务中调用了这个。但是,如果我在postline/EDGE或Chrome中尝试这个。我甚至让前端尝试用标题来调用这个:

WWW-Authentication:negotiate

我发现Kerberos验证失败。

我使用的是spring-boot应用程序,上面提到的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有效,但BROWSER或其他东西无效?欢迎任何反馈。谢谢!!!:(

更新1.0

我发现在chrome中启用DisableAuthNegotiateCnameLookupcname查找将解决这个问题。是否可以通过spring-boot应用程序禁用它,或者我需要将此url添加到受信任的uri中?

如果有人面临这个问题。我通过将DNS名称添加到keytab文件并为同一DNS创建SPN来解决这个问题。问题是DNS查找,因为它一直给出错误的域url。这就是kerberos身份验证失败的原因。

最新更新