kerberos - 我可以向客户端表明支持 SPNEGO 但 NTLM 不适用于 HTTP 请求吗?

标签 kerberos ntlm spnego negotiate www-authenticate

据我所知,Microsoft 使用的两个 WWW-Authenticate 附加功能是

  • NTLM
  • 谈判

如果从服务器向下发送 Negotiate,则将根据一组条件使用 Kerberos

  • 内联网区域
  • 使用主机名而不是 IP 访问服务器
  • IE 中的集成 Windows 身份验证已启用,主机在 Firefox 中受信任
  • 服务器不是浏览器本地的
  • 客户端的 Kerberos 系统已通过域 Controller 的身份验证

然后将在服务器和客户端之间尝试 Kerberos,如果不满足上述条件,则将尝试 NTLM。

我的问题是,服务器是否有某种方式表明不应发送 NTLM?目前,我通过跟踪 session 中的请求来处理此问题,如果收到 NTLM 消息,它将在该 session 生命周期的剩余时间内禁用 Kerberos 和 WWW-Authenticate。

最佳答案

初始的WWW-Authenticate header 仅指定negotiate。它不能再说明任何内容,例如“no NTLM”

我认为可以使用 401 unauthorized 和第二个 Negotiate header 响应客户端发送的第一个 Authenticate: {Base64 NTLMSSP} header ,其中可以包含响应 token ,可能包括指定仅 Kerberos 的 SupportedMechanisms

但我怀疑这只会让你“未经授权”,因为它首先会退回到 NTLM。

关于kerberos - 我可以向客户端表明支持 SPNEGO 但 NTLM 不适用于 HTTP 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489950/

相关文章:

asp.net - ASP站点可与Win7 IE 11一起使用,但不能与Win10 IE11一起使用

java - 找到不支持的主体 key 类型(8)

hadoop - Ranger 和 Kerberos

java - Java 8 更高版本中 `url.openStream` 行为的变化

ssl - Apache CXF soap 客户端使用 jCIFS SSL + NTLM 认证 JDK 5

Java Spring NtlmProcessingFilter 第二个 Controller

qt - 在 Qt 中实现 SPNEGO

php - 在 Ubuntu 11 上安装带有 IMAP/Kerberos 支持的 PHP 时出现问题

tomcat - Spnego 跨域配置

tomcat - 部署 CAS 后 spnego 身份验证停止工作