通过 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 身份验证失败的原因。
有人可以帮我解释一下我错过了什么吗? 我有一个问题 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 身份验证失败的原因。