我正在尝试创建Sprint Boot,Spring Security 6,LDAP服务器(外部而非嵌入式)的身份验证应用程序。当我旋转应用程序并提供用户名登录表单上的(uid)和密码我收到UI上显示的"凭据错误"消息。应用程序日志中未报告任何异常。我不明白是什么原因导致显示"凭据错误"消息。任何指针都非常感谢。这是我的配置文件看起来像
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeHttpRequests().anyRequest().fullyAuthenticated()
.and()
.formLogin();
httpSecurity.authenticationProvider(ldapAuthenticationProvider());
return httpSecurity.build();
}
@Bean
LdapAuthenticationProvider ldapAuthenticationProvider() {
return new LdapAuthenticationProvider(authenticator());
}
@Bean
BindAuthenticator authenticator() {
FilterBasedLdapUserSearch search = new FilterBasedLdapUserSearch("ou=people", "(uid={0})", contextSource());
BindAuthenticator authenticator = new BindAuthenticator(contextSource());
authenticator.setUserSearch(search);
return authenticator;
}
@Bean
public DefaultSpringSecurityContextSource contextSource() {
DefaultSpringSecurityContextSource dsCtx = new DefaultSpringSecurityContextSource("ldap://localhost:389/dc=example,dc=com");
dsCtx.setUserDn("cn=admin,dc=example,dc=com");
dsCtx.setPassword("password");
return dsCtx;
}
}
当我尝试使用ldapsearch命令查找用户时,我确实获得了用户信息
MacBook-Pro:springsecuritywithldapdemo$ ldapsearch -LLL -x -H ldap:// -t -b "dc=example,dc=com" "uid=jsmith1"
dn: uid=jsmith1,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
description: John Smith from Accounting. John is the project manager of the b
uilding project, so contact him with any questions.
cn: John Smith
sn: Smith
uid: jsmith1
userPassword:: anNtaXRoMTIz
我浏览了谷歌在不同搜索中返回的许多搜索结果,其中大多数使用了较旧版本的Spring Security或使用了Spring Security 6的JDBC身份验证。我参考了YouTube教程,看看我是否做错了什么,但看起来不像。
1条答案
按热度按时间wribegjk1#
首先我想感谢您,因为基于您的解决方案,我能够解决我的应用程序中的相同问题.与您的解决方案相比,我唯一的变化是:
所以你应该试试
然后我还做了以下的改动
在您的情况下,我认为这几乎是相同的,因为我认为您也有一个uid=admin的用户。我希望它能解决您的问题,就像它对我所做的那样