【问题标题】:Symfony - Ldap create don't connect to serveurSymfony - Ldap 创建不连接到服务器
【发布时间】:2022-01-25 14:47:06
【问题描述】:

使用 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 测试服务器

【问题讨论】:

    标签: php symfony ldap


    【解决方案1】:

    它确实有效,看起来你真的不知道如何使用它。

    请阅读:The Ldap Component

    虽然 ldap_bind 在身份验证不成功时返回 false,但 Symfony Ldap 组件的 bind 方法在成功时不返回任何内容,并在错误时抛出异常(您可以从 source code 中看到)。在您的情况下,您必须使用 try/catch 块检查连接/身份验证是否成功:

    <?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();
    }
    

    【讨论】:

    • 没错,我是第一次使用它。我尝试制作一个$ldap-&gt;query(),它工作正常。 try/catch 也可以正常工作
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2012-12-24
    • 2020-01-12
    • 2018-07-30
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多