无法连接LDAP服务器 - ldap_bind()中的问题;

时间:2013-10-16 10:13:09

标签: php authentication zend-framework2 ldap

我尝试在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地址,那么它运行正常,但如果我提供域名,则无效。

请帮我解决问题。

1 个答案:

答案 0 :(得分:2)

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

e.g。标准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”。