我能为客户提供SPNEGO支持但不支持HTTP请求的NTLM认证吗?

7
我目前知道Microsoft使用的两个WWW-Authenticate补充是:
- NTLM - Negotiate 如果服务器发送Negotiate,根据一组条件将使用Kerberos:
- Intranet Zone - 使用主机名而不是IP访问服务器 - 在IE中启用了集成的Windows身份验证,Firefox中信任主机 - 服务器不是浏览器本地的 - 客户端的Kerberos系统已经通过域控制器进行了身份验证
然后将在服务器和客户端之间尝试Kerberos,如果未满足上述某些要求,则将尝试NTLM。
我的问题是,服务器是否有一种方法指示不应发送NTLM?我目前通过在会话中跟踪请求来处理此问题,并且如果收到NTLM消息,则会禁用该会话的Kerberos和WWW-Authenticate。

你是因为委派问题而禁用NTLM吗? - Christopher G. Lewis
不,这只是我目前制作的Tomcat JAAS插件中不支持的功能。它仅支持Kerberos / SPNEGO。 - Scott Markwell
3个回答

3
可以的。请看SPNEGO HTTP Servlet Filter项目的参考文档

我实际上只担心HTTP/WWW-Authenticate Negotiate协议级别的问题。 我实际上自己实现了它。 虽然谢谢您提供了这个项目的链接,因为我不知道有人也建立了一个解决方案(看起来好像在约两周前进入了sourceforge)。 - Scott Markwell

3

最初的WWW-Authenticate头仅指定negotiate,不能详细说明其他内容,例如"no NTLM"

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

但我怀疑这只会让你得到"unauthorized",因为它首先会降级到NTLM。


我会调查这个问题。在我看到的大多数Kerberos/SPNEGO被降级的情况下,要么是因为Windows桌面上的Kerberos失败了,要么是环境配置错误。IE在执行Kerberos over NTLM时有一些非常武断和未记录的要求。 - Scott Markwell
@ScottMarkwell 我也注意到了这个问题,但如果IE能提示凭据并直接获取服务票证,而不是走NTLM回退路线,那就太好了。 - davenpcj

2
您可以这样做,(至少在理论上)是的。IE可能会做一些非常奇怪的事情,例如发送没有适当的SPNEGO ASN.1封装的Kerberos令牌,但好吧,那是另一个话题。在符合SPNEGO实现(https://www.rfc-editor.org/rfc/rfc4178#section-4.1)的情况下,您可以这样做。
如果您可以操作NegTokenInit mechTypes成员,只包含Kerberos,它将强制客户端发送Kerberos或无法进行身份验证。

一般问题在于微软将SPNEGO/GSS-API与其现有的NTLM功能混合在一起。因此,您不能保证实际进行协商。 - Scott Markwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接