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

Kerberos authentication via curl is working but not with browser

有人可以帮我解释一下我错过了什么吗? 我有一个问题 curl

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

在 CMD 中工作正常,我能够验证哪个用户在我的后端服务中调用了这个。但是,如果我在 postman/EDGE 或 Chrome 中尝试这个。我什至要求前端尝试通过 headers :

的反应来调用这个

WWW-Authentication:negotiate

我知道 Kerberos 验证失败。

我正在使用 spring 引导应用程序,上面提到的这个 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);
}

我有正确的密钥表和 SPN 设置,因为如果我尝试在 cmd 中这样调用:

knit -k -t my-file.keytab HTTP/backendService.net

它使用我的用户名生成 kerberos 票证。

对我来说最奇怪的部分是为什么 CURL 可以工作但 BROWSER 或其他东西不能工作? 欢迎任何反馈。谢谢!!! :)

更新 1.0

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

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