Kerberos设置和Spring Security

时间:2015-12-11 15:32:42

标签: spring spring-security kerberos

我是Kerberos的新手,但我需要为Web应用程序提供SSO Kerberos身份验证。 我的应用程序的流程如下所示:

1)用户在网址上进行GET

2)如果没有授权,则检查是否有401 WWW-Authenticate:Negotiate

3)使用标题我创建KerberosServiceRequestToken

4)使用SpringSecurity KerberosServiceAuthenticationProvider它尝试验证但我总是得到异常:

org.springframework.security.authentication.BadCredentialsException: GSSContext name of the context initiator is null

SpringSecurity中的配置:

    public KerberosServiceAuthenticationProvider kerberosServiceAuthenticationProvider() {
    KerberosServiceAuthenticationProvider provider = new KerberosServiceAuthenticationProvider();
    provider.setTicketValidator(sunJaasKerberosTicketValidator());
    return provider;
}
public SunJaasKerberosTicketValidator sunJaasKerberosTicketValidator() {
    SunJaasKerberosTicketValidator validator = new SunJaasKerberosTicketValidator();
    validator.setServicePrincipal("HTTP/principal");
    validator.setKeyTabLocation(new ClassPathResource("kerberos/http-web.keytab"));
    validator.setDebug(true);
    return validator;
}

}

1 个答案:

答案 0 :(得分:0)

将keytab位置更改为基于文件的位置,并将其从类路径中删除。

以下是一个示例:

validator.setKeyTabLocation(new FileSystemResource("kerberos/http-web.keytab"));

P.S。不要忘记在UserDetailService中设置KerberosServiceAuthenticationProvider

如果这不能解决问题,请检查您的应用程序是否获得了正确的SPNEGO令牌。除非所有其他设置都已到位,否则您可能无法获得正确的令牌。