Spring boot windows上spring boot应用程序中的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

我正在尝试在windows上部署我的jar spring启动应用程序,但出现错误:[Krb5LoginModule]身份验证失败 KrbeException:找不到默认域

在我的本地主机中,身份验证一切正常,但当我在生产服务器中部署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();
    }
我不知道是否必须指定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应用程序中,这是协商的方式。