7

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

  • NTLM
  • 谈判

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

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

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

我的问题是,服务器是否有某种方法可以指示不应发送 NTLM?我目前通过跟踪会话中的请求来处理这个问题,如果收到 NTLM 消息,它会在会话的剩余时间内禁用 Kerberos 和 WWW-Authenticate。

4

3 回答 3

3

初始WWW-Authenticate标头仅指定negotiate. 它不能再多说什么了,比如"no NTLM"

我认为可以响应客户端发送的第一个 Authenticate: {Base64 NTLMSSP} 标头401 unauthorized和第二个Negotiate标头,该标头可以包含响应令牌,可能包括SupportedMechanisms指定仅 Kerberos 的标头。

但我怀疑这只会让你"unauthorized"受益,因为它首先回到了 NTLM。

于 2009-06-11T03:49:08.270 回答
3

是的你可以。查看 SPNEGO HTTP Servlet Filter 项目的参考文档

于 2009-11-04T16:28:40.500 回答
2

你可以这样做,(至少在理论上)是的。IE 可能会做一些非常奇怪的事情,比如在没有适当的 SPNEGO ASN.1 封装的情况下发送 Kerberos 令牌,但是,那是一个不同的主题。在符合标准的 SPNEGO ( https://www.rfc-editor.org/rfc/rfc4178#section-4.1 ) 实施中,您可以这样做。

如果您可以操纵 NegTokenInit mechTypes 成员以仅包含 Kerberos,它会强制客户端发送 Kerberos 或无法进行身份验证。

于 2009-10-23T12:53:31.947 回答