问题描述
我正在尝试在Windows上部署我的jar spring boot应用程序,但出现错误:[Krb5LoginModule]身份验证失败 KrbException:无法找到默认领域
在我的本地主机中,通过身份验证可以正常进行,但是当我将jar部署到生产服务器中时,即使两个窗口都在同一个campany doamin中,我也会收到错误消息。
系统管理员告诉我,对于其他应用程序,身份验证基于Kerberos和iis,因此用于身份验证的票证交换非常容易。
这是我的安全配置:
@Bean
public KerberosAuthenticationProvider kerberosAuthenticationProvider() {
KerberosAuthenticationProvider provider =
new KerberosAuthenticationProvider();
SunJaasKerberosClient client = new SunJaasKerberosClient();
client.setDebug(true);
provider.setKerberosClient(client);
provider.setUserDetailsService(dummyUserDetailsService());
return provider;
}
@Bean
public SpnegoEntryPoint spnegoEntryPoint() {
//return new SpnegoEntryPoint("/login");
return new SpnegoEntryPoint();
}
@Bean
public SpnegoAuthenticationProcessingFilter spnegoAuthenticationProcessingFilter(
AuthenticationManager authenticationManager) {
SpnegoAuthenticationProcessingFilter filter =
new SpnegoAuthenticationProcessingFilter();
filter.setAuthenticationManager(authenticationManager);
return filter;
}
@Bean
public KerberosServiceAuthenticationProvider kerberosServiceAuthenticationProvider() {
KerberosServiceAuthenticationProvider provider =
new KerberosServiceAuthenticationProvider();
provider.setTicketValidator(sunJaasKerberosTicketValidator());
provider.setUserDetailsService(dummyUserDetailsService());
return provider;
}
@Bean
public SunJaasKerberosTicketValidator sunJaasKerberosTicketValidator() {
SunJaasKerberosTicketValidator ticketValidator =
new SunJaasKerberosTicketValidator();
ticketValidator.setServicePrincipal("HTTP/localhost@fgao.fr");
ticketValidator.setKeyTabLocation(new
FileSystemResource("c:\\user\\tomcat.keytab"));
ticketValidator.setDebug(true);
return ticketValidator;
}
@Bean
public DummyUserDetailsService dummyUserDetailsService() {
return new DummyUserDetailsService();
}
我不知道是否必须指定密钥表文件,因为在Windows上不需要密钥表或kb5.conf文件,因此c:\ user \ tomcat.keytab文件为空。
有人可以帮我吗
解决方法
您将需要一个Keytab文件。
Keytab文件包含kerberos模块解密进入的kerberos令牌所需的密钥。
密钥表文件不是开箱即用的,因为它特定于AD中的用户帐户。
它必须由系统管理员生成并提供给您。
您将需要一个服务用户(专用于您的应用程序)。为其生成密钥表。
将其复制到应用程序服务器上,并在spring中指定其路径。
在Windows上检查ktpass
命令以获取有关创建密钥表的更多详细信息。
您可能还需要检查krb5 conf文件,其内容以及如何在Spring中指定它。