我有一个外部 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 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,但找不到一个简单的脚本来设置来测试,如果它不起作用,则无需花费大量时间。