Symfony 5.3 json_login_ldap认证一直提示凭证无效问题求助
问题核心原因
你遇到的凭证无效问题由两个配置错误共同导致:
json_login_ldap的dn_string配置错误,导致Symfony使用错误的用户标识去LDAP服务器做绑定校验- 密码哈希器配置不符合LDAP认证逻辑,Symfony尝试本地校验不存在的密码哈希
具体修改方案
1. 修正security.yaml配置
security: enable_authenticator_manager: true # 修正缩进,必须为security的子项 password_hashers: Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' # 新增LdapUser的哈希器配置,告诉Symfony不要本地校验密码,交由LDAP服务器处理 Symfony\Component\Ldap\Security\LdapUser: ~ providers: my_ldap: ldap: service: Symfony\Component\Ldap\Ldap base_dn: '%env(resolve:BASE_DN)%' search_dn: '%env(resolve:SEARCH_DN)%' search_password: '%env(resolve:LDAP_PASSWORD)%' default_roles: ROLE_USER uid_key: sAMAccountName # 你确认过是sAMAccountName就不用改 firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: provider: my_ldap stateless: true json_login_ldap: service: Symfony\Component\Ldap\Ldap check_path: api_login username_path: security.credentials.login password_path: security.credentials.password search_dn: '%env(resolve:SEARCH_DN)%' search_password: '%env(resolve:LDAP_PASSWORD)%' # 把dn_string从BASE_DN改成{dn},表示用搜索到的用户条目的完整DN做绑定校验 dn_string: '{dn}' query_string: 'sAMAccountName={username}' access_control: # - { path: ^/admin, roles: ROLE_ADMIN } # - { path: ^/profile, roles: ROLE_USER }
2. 可选补充排查
如果修改后还是报错,可以做以下校验:
- 确认PHP的LDAP扩展已安装启用:运行
php -m | grep ldap查看是否有输出 - 部分Active Directory服务支持用
userPrincipalName直接绑定,可以尝试把dn_string改成{username}@my.example.com,无需修改其他配置即可测试 - 确认LDAP服务器的389端口无防火墙限制,绑定请求没有被拦截
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

