Spring Security 6 LDAP认证返回"Bad Credentials"无异常求助
Spring Security 6 + LDAP 认证提示"Bad Credentials"无日志的排查方向
针对你遇到的登录提示"Bad Credentials"但无异常日志的问题,可按以下方向排查:
开启调试级日志
目前无日志无法定位问题,先把Spring Security和LDAP相关日志级别调到DEBUG,在application.properties中添加:logging.level.org.springframework.security=DEBUG logging.level.org.springframework.ldap=DEBUG重启应用后再次登录,日志会输出用户搜索、LDAP绑定的完整流程,能明确是用户未找到、密码验证失败还是其他环节出错。
验证LDAP用户直接绑定权限
先用ldapbind命令测试用户自身的LDAP绑定是否正常,比如:ldapbind -x -D "uid=jsmith1,ou=people,dc=example,dc=com" -w jsmith123如果该命令失败,说明LDAP服务器不允许此用户绑定(比如密码格式不支持明文、用户权限受限);如果成功,再排查Spring Security配置问题。
核对密码存储格式
从你的ldapsearch结果看,userPassword是base64编码的明文(解码后为jsmith123),但部分LDAP服务器要求密码存储为带哈希方案的格式(如{SSHA}xxxxxx),明文存储可能导致绑定失败。可尝试将用户密码改为标准哈希格式后再测试。确认用户搜索逻辑有效性
检查配置中的FilterBasedLdapUserSearch是否能正确找到用户:- 搜索基准
ou=people结合contextSource的basedc=example,dc=com,对应路径ou=people,dc=example,dc=com,与ldapsearch返回的用户DN一致,路径没问题; - 开启DEBUG日志后,可查看搜索返回的用户数量,确认是否能唯一匹配目标用户。
- 搜索基准
检查表单参数传递
Spring Security默认接收username和password参数,如果前端登录表单的用户名参数名是uid而非username,需在formLogin中显式配置参数映射:.formLogin(form -> form .usernameParameter("uid") .passwordParameter("password") )确保前端提交的参数名与后端接收的一致。
内容的提问来源于stack exchange,提问作者VenkatK
相关产品推荐
相关产品推荐

