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

时间:2018-07-17 22:21:04

标签: spring kerberos ntlm

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

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

似乎浏览器无法使用kerberos(这是可以的,因为用户未加入域),并尝试将NTLM令牌发送到App。(SpnegoAuthenticationProcessingFilter:149-协商标头无效:协商TlRMTVNTUAABAAAAAAA4l4II4gAAAAAAAAAAAAAAAAAAGAbEdAAAADw = =)(无法识别为Kerberos有效令牌),因此它会失败,并出现GSSException。

Internet(hereherehere)中有很多关于此问题的参考,其中大多数建议解决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>

0 个答案:

没有答案