Windows上的Spring Boot应用程序中的kerberos iis身份验证问题

问题描述

我正在尝试在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中指定它。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...