You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 5.3 json_login_ldap认证一直提示凭证无效问题求助

问题核心原因

你遇到的凭证无效问题由两个配置错误共同导致:

  1. json_login_ldap的dn_string配置错误,导致Symfony使用错误的用户标识去LDAP服务器做绑定校验
  2. 密码哈希器配置不符合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:54:05