如何在Waffle中强制使用Kerberos以避免回退到NTLM?
强制Waffle使用Kerberos而非回退到NTLM
当然可以!要让Waffle强制使用Kerberos、彻底禁用NTLM回退,你可以通过几种配置方式实现,具体看你的集成场景:
1. Servlet Filter配置(Java Web应用最常用)
如果你在用Waffle的NegotiateSecurityFilter,直接在配置里添加allowNTLM参数并设为false即可:
- 若使用
web.xml配置:<filter> <filter-name>NegotiateSecurityFilter</filter-name> <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class> <init-param> <param-name>allowNTLM</param-name> <param-value>false</param-value> </init-param> </filter> - 若用Spring Boot等注解式配置,可以通过
FilterRegistrationBean设置该参数:@Bean public FilterRegistrationBean<NegotiateSecurityFilter> waffleFilter() { FilterRegistrationBean<NegotiateSecurityFilter> registrationBean = new FilterRegistrationBean<>(); NegotiateSecurityFilter filter = new NegotiateSecurityFilter(); filter.setAllowNTLM(false); registrationBean.setFilter(filter); // 其他配置,比如urlPatterns等 return registrationBean; }
这个参数会直接拒绝所有NTLM认证请求,只接受Kerberos协议的请求。
2. 自定义编程集成场景
如果是手动构建Waffle的认证提供者,可以直接设置allowNTLM属性为false:
NegotiateSecurityFilterProvider kerberosOnlyProvider = new NegotiateSecurityFilterProvider(); kerberosOnlyProvider.setAllowNTLM(false); List<ISecurityFilterProvider> providers = new ArrayList<>(); providers.add(kerberosOnlyProvider); NegotiateSecurityFilter filter = new NegotiateSecurityFilter(); filter.setProviders(providers);
3. 前置检查:确保Kerberos环境正常
禁用NTLM回退后,没有备选认证方式了,所以一定要先确保Kerberos本身能正常工作:
- 确认应用服务器的服务账户已绑定正确的SPN(服务主体名称),比如
HTTP/your-app-domain.com@YOUR-REALM.COM - 客户端机器要能正常解析SPN并获取Kerberos票据,避免因为Kerberos配置失败导致认证直接报错
这样配置后,Waffle就只会处理Kerberos认证请求,不会再回退到NTLM啦。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

