KerberosAuthenticationProvider与KerberosServiceAuthenticationProvider

时间:2019-05-15 15:23:36

标签: java spring spring-security kerberos spring-security-kerberos

痛苦!

我在项目中使用带有Kerberos的Spring Security 5进行SSO身份验证。

WebSecurityConfig中,我注册了两个AuthenticationProvider

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(msfUserDetailsService).passwordEncoder(passwordEncoder());
        assertThatUnlimitedCryptographyEnabled();

        // Two providers
        auth.authenticationProvider(kerberosAuthenticationProvider());
        auth.authenticationProvider(kerberosServiceAuthenticationProvider());
}

这似乎是它的完成方式,如以下两个示例所示:

但是我看不到为什么我都需要它们。在认证期间,KerberosServiceAuthenticationProvider是用于验证Kerberos票证的证件(请参见JavaDoc

KerberosAuthenticationProvider的作用是什么? JavaDoc在这种情况下只是说

  

Kerberos的身份验证提供程序。

1 个答案:

答案 0 :(得分:1)

正如您所说:KerberosServiceAuthenticationProvider用于验证SSO身份验证中的票证,而KerberosAuthenticationProvider用于基于表单的身份验证,当客户端不支持SSO时,通常将其用作备用(例如linux系统上的浏览器)。这种身份验证由UsernamePasswordAuthenticationFilter中应用的WebSecurityConfigurerAdapter处理:

public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity httpSecurity) throws Exception {
     httpSecurity
      ...
      .formLogin()
  ...
  }
  ...
}

如果您不使用表单登录,则可以按照注释中的说明忽略此提供程序。