如何在配置了Kerberos的Spring Security上禁用回退到NTLM?

Nic*_*ssi 5 spring ntlm kerberos

我有一个配置有Kerberos的Spring App,对于加入AD域的用户来说,它运行良好。还有其他用户可以访问域外的应用程序,因此Kerberos无法使用,因此应该提示他们输入用户名和密码(html表单)。

如果发现在某些情况下(取决于浏览器),此过程将失败,并显示GSSException:检测到缺陷令牌(机制级别:GSSHeader未找到正确的标记)

看来,浏览器无法使用Kerberos(这是确定,因为用户没有加入到域),并试图发送NTLM令牌到App (SpnegoAuthenticationProcessingFilter:149 -协商头部是无效的:协商TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw ==)这是不认可作为Kerberos有效令牌,因此它会失败,并显示GSSException。

Internet上有很多对此问题的引用(此处此处此处),并且大多数都建议解决kerberos问题,但是在我的情况下,这不是kerberos问题,因为有些用户未加入该域。

因此,是否有任何方法可以迫使kerberos退回html表单,而不是发送NTLM令牌?

这是我在spring-security.xml上的配置块

<http entry-point-ref="spnegoEntryPoint" use-expressions="true">
   <intercept-url pattern="/logout" access="permitAll"/>
   <intercept-url pattern="/login" access="permitAll"/>
   <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
   <form-login login-page="/login"/>
   <custom-filter ref="spnegoAuthenticationProcessingFilter" before="BASIC_AUTH_FILTER" />
   <csrf disabled="true"/>
</http>
Run Code Online (Sandbox Code Playgroud)