我目前知道的Microsoft使用的两个WWW-Authenticate添加项是

  • NTLM
  • 谈判

  • 如果从服务器向下发送协商,则将基于一组条件使用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 ,该 header 可以包含响应 token ,可能还包括指定Kerberos Only的SupportedMechanisms

    但是我怀疑那只会给你"unauthorized",因为它最初是回到NTLM的。

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

    10-11 17:40