java - KerberosAuthenticationProvider 与 KerberosServiceAuthenticationProvider

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

嗯!

我在项目中使用 Spring Security 5 和 Kerberos 进行 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在这种情况下只是说

AuthenticationProvider for kerberos.

最佳答案

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

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/

相关文章:

java - 如何在基于Spring Java的配置中正确使用@Inject注解?

java - 让 spring 上下文变量指向 webapp 中的实际外部上下文

java - 应用程序上下文中某些bean的依赖关系形成循环:

spring-security - HttpSecurity 使用 Spring,区分 url 权限

java - Android 动态壁纸服务 onStop 未被调用

java - CheckBox 中的 setChecked 和 setSelected 不起作用

java - 请求处理失败;嵌套异常是 org.hibernate.type.SerializationException : could not deserialize

带有简单 OpenID 的 Spring Social

java - 我应该在单例中使用哪个android上下文?

java - 在伦敦地铁上进行网络检测