首页 > 解决方案 > Symfony Ldap:无法使用“Symfony\Component\Ldap\Ldap”ldap 服务检查凭据,因为找不到此类服务

问题描述

我想将我的自定义 Ldap 用户提供程序从 symfony 4.1.3 迁移到 5.4.0。通过以下实现,它在 4.1.3 中可以正常工作,但在 5.4.0 中使用相同的配置,我收到以下错误消息:

无法使用“Symfony\Component\Ldap\Ldap”ldap 服务检查凭据,因为找不到此类服务。您是否可能忘记将“ldap”服务标签添加到此服务?

编辑: 服务配置中的以下行解决了该问题,如错误消息中所述:

tags: ['ldap']

服务.yaml:

services:
    Symfony\Component\Ldap\Ldap:
        arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
        tags: ['ldap']
    Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
        arguments:
            -   host: '%ldap_host%'
                port: 3269
                encryption: ssl
                options:
                    protocol_version: 3
                    referrals: false
            
    security.user.provider.ldap:
        class: App\Security\LdapUserProvider
        arguments: {0: null, 1: null, 2: null, 3: null, 4: null, 5: null, 6: null, 7: null, 8: null}

安全.yaml:

security:
    providers:
        provider_ldap:
            ldap:
                service: Symfony\Component\Ldap\Ldap
                base_dn: dc=ad,dc=...
                search_dn: cn=...
                search_password: *
                default_roles: ROLE_LDAP_USER
                uid_key: cn
                filter: ({uid_key}={username})
    firewalls:
        main:
            pattern:    ^/

            form_login_ldap:
                login_path: login
                check_path: login
                provider: provider_ldap
                #csrf_token_generator: security.csrf.token_manager
                service: Symfony\Component\Ldap\Ldap
                dn_string: 'cn={username},ou=User,ou=...'
            
            logout:
                path: /logout
                target: /

标签: symfonyauthenticationldap

解决方案


推荐阅读