痛苦!
我在项目中使用带有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的身份验证提供程序。
答案 0 :(得分:1)
正如您所说:KerberosServiceAuthenticationProvider
用于验证SSO身份验证中的票证,而KerberosAuthenticationProvider
用于基于表单的身份验证,当客户端不支持SSO时,通常将其用作备用(例如linux系统上的浏览器)。这种身份验证由UsernamePasswordAuthenticationFilter
中应用的WebSecurityConfigurerAdapter
处理:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
...
.formLogin()
...
}
...
}
如果您不使用表单登录,则可以按照注释中的说明忽略此提供程序。