Spring boot windows上spring boot应用程序中的kerberos iis身份验证问题
我正在尝试在windows上部署我的jar spring启动应用程序,但出现错误:[Krb5LoginModule]身份验证失败 KrbeException:找不到默认域 在我的本地主机中,身份验证一切正常,但当我在生产服务器中部署jar时,即使两个窗口位于同一个campany doamin中,也会出现错误 系统管理员告诉我,对于其他应用程序,身份验证基于Kerberos和iis,因此身份验证的票证交换非常容易 这是我的安全配置:Spring boot windows上spring boot应用程序中的kerberos iis身份验证问题,spring-boot,iis,kerberos,spnego,spring-security-kerberos,Spring Boot,Iis,Kerberos,Spnego,Spring Security Kerberos,我正在尝试在windows上部署我的jar spring启动应用程序,但出现错误:[Krb5LoginModule]身份验证失败 KrbeException:找不到默认域 在我的本地主机中,身份验证一切正常,但当我在生产服务器中部署jar时,即使两个窗口位于同一个campany doamin中,也会出现错误 系统管理员告诉我,对于其他应用程序,身份验证基于Kerberos和iis,因此身份验证的票证交换非常容易 这是我的安全配置: @Bean public KerberosAuthen
@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();
}
我不知道是否必须指定keytab文件,因为在windows上不需要keytab或kb5.conf文件,所以c:\user\tomcat.keytab文件为空
有人能帮我一下吗?你需要一个键盘文件。
密钥表文件包含kerberos模块解密传入kerberos令牌所需的密钥。
密钥表文件不是现成的,因为它特定于AD中的用户帐户。
它必须由您的系统管理员生成并提供给您。 您将需要一个服务用户(专用于您的应用程序)。为它生成keytab。
在应用服务器上复制它,并在spring中指定其路径。
检查windows上的
ktpass
命令,了解有关创建键表的更多详细信息。您可能还需要检查krb5 conf文件,它包含什么,以及如何在Spring中指定它。谢谢,我终于发现了问题,应用程序的启动程序用户是系统用户,不在域中,因此无法在kerberos中取消交换ticker,现在我的问题仍然存在,但必须插入windows login+passwod才能访问应用程序,而不是完全SSO,你知道有什么问题吗?在浏览器的本地intranet受信任站点中重新添加应用程序URL。这样做,它将不会提供popupThanks,但我仍然存在SSO配置问题,事实上,我必须实现IIS或ADFS以使其成为可能(不要求域控制器进行身份验证),我如何配置embedded to tomcat以与IIS ou ADF通信?感谢您的第一点-您是如何解决keytab问题的?没有它,身份验证就无法工作。关于你的秒数,你不需要ADF。您的应用程序必须与浏览器协商,通过发送HTTP 401和WWW Authenticate:Congregate标头来获取用户的kerberos令牌。我不确定IIS中是否默认存在此功能。在JavaWeb应用程序中,这是协商的方式。