php – 无法连接LDAP服务器 – ldap_bind();

我试图在我在ZF2中开发的Web应用程序中实现LDAP身份验证. LDAP身份验证在
Windows 7中正常运行.

但是,在将应用程序移动到LINUX机器后,LDAP身份验证不起作用.我总是得到错误:警告:ldap_bind():无法绑定到服务器:无法联系第20行LdapConnect.php中的LDAP服务器

我使用过这些脚本:

$ldaphost = "ldap://xxxx.net";
$ldapport = 389;
$ds = ldap_connect($ldaphost, $ldapport) or die("Could not connect to $ldaphost");
if ($ds)
{
    $username = "username@xxxx.net";
    $upasswd  = "password";
    $ldapbind = ldap_bind($ds, $username, $upasswd);

    if ($ldapbind)
    {
       print "Congratulations! you are authenticated successfully.";
    }else{
      print "Better luck next time!";
    }
}

我应该安装任何软件包还是应该进行任何配置设置?

注意:如果我给IP地址然后它工作正常,但如果我给域名,那么它不起作用.

请帮我解决问题.

最佳答案 库可能在2或不同版本之间有所不同.你会惊讶于ldap客户端有多少种变体.在你的位置,我会(如果可用)使用ldap客户端以几种不同的方式进行相同类型的连接.

例如标准ldapsearch上的“-x”:
       -x使用简单身份验证而不是SASL.

所以你可以表达这样的连接:

ldapsearch -h xxxx.net -p 389(等)
ldapsearch -x -h ldap://xxxx.net:389(这应该是-H ..)

等等.
您的代码之外的内容也可能成为问题.产品服务器通常具有对服务器/客户端透明的防火墙和代理(例如F5).
确保您的最终代码具有绑定和搜索的异常处理.我对php的实现并不太熟悉,而且doco很薄.通常你会使用同步绑定.

你能否验证上面的代码与Windows上的代码完全相同?我问的原因是看到这里:http://php.net/manual/en/function.ldap-connect.php似乎你可能混合了两种类型的绑定.我绝对不会像标准的python那样做.

因此,如果通常使用URI,您可以这样做:

ldap_connect("ldap://blah:389")

如果你通过主机/端口组合连接:

ldap_connect("blah","389")

使用最少的异常信息,我最好的猜测是它实际上尝试绑定到端口“389”上的主机名“ldap://xxxx.net”.

点赞