有人能告诉我一些参考资料吗?这些资料可以指导我如何实现自定义spring安全身份验证,首先在ldap服务器上测试找到的用户的凭据,如果该用户的ldap用户名字段存在,如果无法进行身份验证(因为ldap用户名不存在,或者给定的密码没有对服务器上的用户名进行身份验证),则会尝试根据本地数据库中散列的用户本地密码进行身份验证。非常感谢。
nkoocmlb1#
对于这个特定的问题,似乎没有太多好的答案。虽然我还没有给出一个完整的工作ldap示例,但在注解中@marcus链接的ldap示例中应该有一个良好的开端。话虽如此,您可以很容易地按照您想要的顺序注册两个身份验证提供程序,默认为 DaoAuthenticationProvider 第二名:
DaoAuthenticationProvider
@Configuration public class SecurityConfiguration { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { // @formatter:off return http .authorizeRequests(authorizeRequests -> authorizeRequests .anyRequest().authenticated() ) .formLogin(withDefaults()) .authenticationProvider(ldapAuthenticationProvider()) .authenticationProvider(daoAuthenticationProvider()) .build(); // @formatter:on } @Bean public AuthenticationProvider ldapAuthenticationProvider() { LdapContextSource contextSource = null; // TODO See sample for example return new LdapAuthenticationProvider(new BindAuthenticator(contextSource)); } @Bean public AuthenticationProvider daoAuthenticationProvider() { DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider(); authenticationProvider.setUserDetailsService(userDetailsService()); return authenticationProvider; } @Bean public UserDetailsService userDetailsService() { UserDetails userDetails = User.builder() .username("user") .password("{noop}password") .roles("USER") .build(); return new InMemoryUserDetailsManager(userDetails); } }
显然,您需要提供自己的用户详细信息,它使用数据库而不是内存。username-password示例将帮助您开始使用它,您可以替换 MapCustomUserRepository 在该示例中,使用例如Spring Data @Repository .
MapCustomUserRepository
@Repository
1条答案
按热度按时间nkoocmlb1#
对于这个特定的问题,似乎没有太多好的答案。
虽然我还没有给出一个完整的工作ldap示例,但在注解中@marcus链接的ldap示例中应该有一个良好的开端。话虽如此,您可以很容易地按照您想要的顺序注册两个身份验证提供程序,默认为
DaoAuthenticationProvider
第二名:显然,您需要提供自己的用户详细信息,它使用数据库而不是内存。username-password示例将帮助您开始使用它,您可以替换
MapCustomUserRepository
在该示例中,使用例如Spring Data@Repository
.