Symfony - Ldap 创建不连接到服务器

Symfony - Ldap create don't connect to serveur

使用 PHP 函数 ldap_connect 可以正常工作:

我的控制器:

/**
* @Route("/ldap", name="ldap")
*/
public function ldap(Request $request) {
    $ldaprdn  = 'cn=read-only-admin,dc=example,dc=com';    
    $ldappass = 'password';  

    $ldapconn = ldap_connect("ldap://ldap.forumsys.com")
        or die("Impossible de se connecter au serveur LDAP.");

    if ($ldapconn) {

        ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);

        // Connexion au serveur LDAP
        $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
        var_dump($ldapbind); 

        // Vérification de l'authentification
        if ($ldapbind) {
            echo "Connexion LDAP OK ...";
        } else {
            echo "Connexion LDAP KO ...";
        }
    }
}

结果:bool(true)

但是如果我使用 Symfony Ldap,它就不起作用,你知道为什么吗?

我的控制器:

use Symfony\Component\Ldap\Ldap;

[...]

/**
* @Route("/ldap", name="ldap")
*/
public function ldap(Request $request) {
    $host = 'ldap.forumsys.com';
    $port = 389;
    $version = 3;
    $dn  = 'cn=read-only-admin,dc=example,dc=com';
    $pwd = 'password';
    
    $ldap = Ldap::create('ext_ldap', [ 
        'host' => $host,
        'port' => $port,
        'version' => $version,
    ]);
    
    $ldap->bind($dn, $pwd);
    var_dump($ldap); 
}

结果:

["connection":"Symfony\Component\Ldap\Adapter\ExtLdap\Connection":private]=> resource(31) of type (ldap link) ["config":protected]=> array(8) { ["host"]=> string(17) "ldap.forumsys.com" ["version"]=> int(3) ["encryption"]=> string(4) "none" ["port"]=> int(389) ["connection_string"]=> string(28) "ldap://ldap.forumsys.com:389" ["debug"]=> bool(false) ["referrals"]=> bool(false) ["options"]=> array(3) { ["network_timeout"]=> string(2) "60" ["protocol_version"]=> int(3) ["referrals"]=> bool(false) } } } ["entryManager":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL } }

我使用 online Ldap 测试服务器

居然有用,看来你还不知道怎么用

请阅读:The Ldap Component

虽然 ldap_bind returns false 当身份验证不成功时,Symfony Ldap 组件的 bind 方法 returns 成功时什么都没有,并在错误时抛出异常(你可以看到来自 source code)。在您的情况下,您必须使用 try/catch 块检查 connection/authentication 是否成功:

<?php

use Symfony\Component\Ldap\Exception\ConnectionException;

try {
    $ldap->bind($dn, $pwd);
} catch (ConnectionException $exception) {
    // Error message based on your original code
    echo 'Connexion LDAP KO:' . $exception->getMessage();
}