FR3DLdapBundle - 绑定需要DN格式的用户名

时间:2014-11-19 06:51:24

标签: symfony authentication ldap fosuserbundle fr3dldapbundle

我正在使用FR3DLdapBundle和FOSUserBundle。

  

Symfony 2.5.6

     

FOSUserBundle~2.0@dev

     

FR3DLdapBundle~2.0@dev

$ldapManager = $this->get('fr3d_ldap.ldap_manager');
print_r($ldapManager->findUserByUsername('nhoang@ldap.example.com'));

但是我发现了一个错误。

Binding requires username in DN form 
CRITICAL - Uncaught PHP Exception FR3D\LdapBundle\Driver\LdapDriverException: "An error occur with the search operation." at myproj\vendor\fr3d\ldap-bundle\FR3D\LdapBundle\Driver\ZendLdapDriver.php line 55 

我已经完成了安装文档中的所有内容

config.yml

fr3d_ldap:
    driver:
        host:                ldap.example.com
        port:                389
        username:            ldapadmin@ldap.example.com
        password:            password
        bindRequiresDn:      true
        baseDn:              dc=ldap,dc=example,dc=com
        accountFilterFormat: (&(uid=%s)) # Optional. sprintf format %s will be the username
    user:
        baseDn: dc=ldap,dc=example,dc=com
        filter: (&(ObjectClass=Person))
        attributes:
          - { ldap_attr: uid,  user_method: setUsername }

security.yml

providers:
    chain_provider:
        chain:
            providers: [fos_userbundle, fr3d_ldapbundle]        

    fr3d_ldapbundle:
        id: fr3d_ldap.security.user.provider

    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    admin:
        pattern: /admin/(.*)
        form_login:
            provider:       fos_userbundle
            csrf_provider:  form.csrf_provider
            login_path:     _admin_login
            check_path:     _admin_login_check
            default_target_path: /admin
        logout:
            path:           _admin_logout
            target:         _admin_login
        anonymous:  true
    main:
        pattern: ^/
        fr3d_ldap: ~
        form_login:
            provider:       chain_provider
            csrf_provider:  form.csrf_provider            
            default_target_path: /profile
        logout: true
        anonymous: true
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    default:
        anonymous: ~

我不知道如何做这项工作。

1 个答案:

答案 0 :(得分:1)

我们在尝试使用内部辅助工具处理公司域身份验证时遇到了同样的问题。

我们必须执行以下操作才能使其发挥作用:

尽管fr3d文档说这仅适用于OpenLDAP,但我们尝试在驱动程序设置下使用以下格式设置特殊身份验证帐户用户名(而不是AuthAccount@dns.example.com,是的,我们的公司LDAP是Microsoft AD):

config.yml

    fr3d_ldap:
        driver:
            host:                dns.example.com
            port:                389
            username:            CN=AuthAccount,OU=Pseudo Accounts,OU=Managed Objects,DC=example,DC=com
            password:            yourPassw0rd
            bindRequiresDn:      true

请注意,根本没有 baseDn (已在用户名中设置,否则进一步过滤将无效)。

之后问题就消失了,唯一剩下的就是正确设置用户设置:

        user:
            baseDn: OU=Managed Objects,DC=example,DC=com
            filter: (&(sAMAccountName=%s))

还有一些与属性等有关的工作,但是通过上述设置,LDAP auth本身开始工作正常,我们可以使用域凭据登录我们的工具。