in!

我在项目中使用带有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());
}


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


https://docs.spring.io/spring-security-kerberos/docs/current/reference/html/ssk-spnego.html
https://www.ebayinc.com/stories/blogs/tech/customizing-spring-security-with-multiple-authentications/


但是我不明白为什么我都需要它们。在身份验证期间,KerberosServiceAuthenticationProvider是用于验证Kerberos票证的证书(请参见JavaDoc

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


  Kerberos的AuthenticationProvider。

最佳答案

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

public class SecurityConfig extends WebSecurityConfigurerAdapter {

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


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

关于java - KerberosAuthenticationProvider与KerberosServiceAuthenticationProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56152842/

10-13 09:05