使用 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 } }
我使用在線 LDAP測驗服務器
uj5u.com熱心網友回復:
它確實有效,但您似乎并不真正知道如何使用它。
請閱讀:LDAP 組件
雖然ldap_bind在身份驗證不成功時回傳 false,但 Symfony Ldap 組件的bind方法在成功時不回傳任何內容并在錯誤時拋出例外(您可以從源代碼中看到)。在您的情況下,您必須使用 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();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395896.html
