繁体   English   中英

PHP LDAP连接可从外部服务器对Active Directory进行身份验证

[英]PHP LDAP Connection to Authenticate against Active Directory from External Server

我有一个外部Web服务器试图通过LDAP对内部服务器上的Active Directory进行身份验证。 我可以在本地进行连接和身份验证,尽管使用相同的代码(切换主机和端口)无法在外部进行身份验证。 我们还有其他能够连接和认证的服务,例如Attask(http://www.attask.com/)。

外部服务器当前是Media Temple上的Linux(gs),运行PHP 5.3.15,并且已启用LDAP支持。

内部服务器当前是带有LDAP和Active Directory的Windows Server 2008。

下面的代码是我正在使用的当前PHP,该PHP能够在本地连接,但是在外部服务器上有问题。 它基本上使用PHP LDAP连接字符串并尝试进行绑定。 如果失败,它将尝试匿名绑定。 两者都无法在外部工作,并返回错误:无法联系LDAP服务器。

<?php
$username = 'username';
$password = 'password';

$ldapconfig['host'] = '00.000.000.000';
$ldapconfig['port'] = '636';
$ldapconfig['basedn'] = 'dc=client,dc=eqc,dc=local';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10);

$dn="".$username."";

if ($bind=ldap_bind($ds, $dn, $password)) {
  echo("Login correct");
} else {

  echo("Unable to bind to server.</br>");

  echo("msg:'".ldap_error($ds)."'</br>".ldap_errno($ds)."");

  if ($bind=ldap_bind($ds)) {

    $filter = "(cn=*)";

    if (!($search=@ldap_search($ds, $ldapconfig['basedn'], $filter))) {
      echo("Unable to search ldap server<br>");
      echo("msg:'".ldap_error($ds)."'</br>");
    } else {
      $number_returned = ldap_count_entries($ds,$search);
      $info = ldap_get_entries($ds, $search);
      echo "The number of entries returned is ". $number_returned."<p>";
      for ($i=0; $i<$info["count"]; $i++) {
        var_dump($info[$i]);
      }
    }
  } else {
    echo("Unable to bind anonymously<br>");
    echo("msg:".ldap_error($ds)."<br>");
  }
}
?>

一些注意事项:

  • 外部LDAP服务器正在使用LDAPS,因此建议的主机在端口636上为ldaps://00.000.000.000

  • 我已经尝试与“用户名”以及“用户名@ 00.000.000.000”绑定

  • 有一个防火墙,但是,外部服务器可以成功ping通内部LDAP服务器,因此在该级别上进行连接。

任何帮助将不胜感激。 如果有服务器设置或类似性质的事情,不妨了解一下。 另外,我已经检查了ADFS,虽然找不到一个简单的脚本来进行测试,但是如果不起作用,则会花费大量时间无休止地进行测试。

从Linux机器使用LDAPS连接到AD时,我总是不得不添加该行

TLS_REQCERT never

在/etc/ldap.conf或等效文件中(可能需要重新启动apache-不确定)。 您也可以为主机尝试格式“ ldaps://server.domain.tld:636”,尽管我认为这不是问题。

我在http://en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP中找到了一些不错的文档,尽管目前看来该文档已经不存在了。 Google的缓存版本: http : //webcache.googleusercontent.com/search? q=cache: http : //en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP

您是否检查过SSL证书错误? 您使用的是自签名证书还是正式证书?

“如果你正在使用SSL(如LDAPS)和的ldap_bind抛出‘无法绑定到服务器:’错误,请检查在ldap_connect使用的主机名的SSL证书中相匹配的‘CN’的LDAP服务器” 来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM