我有一些使用PHP和LDAP连接到AD的代码:
$host = 'ldap://stack.overflow.com';
$port = 389;
$username = 'stackOverflow';
$password = 'IaMP4ssWord';
$dn = 'CN=Users, DC=STACK, DC=OVERFLOW, DC=COM';
$cond = '(&(objectcategory=user)(displayname=*))';//All users that have a displayname
if($ldap = ldap_connect($host, $port))
{
if(ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3))
{
if(ldap_bind($ldap, $username, $password))
{
$attrs = array('displayname', 'mail');
if($rs = ldap_search($ldap, $dn, $cond, $attrs))
{
$results = ldap_get_entries($ldap, $rs);
echo "<pre>";print_r($result);echo "</pre>";//Print the results
}
}
else
{ echo 'Binding failed';}
}
else
{ echo 'Setting options failed';}
}
else
{ echo 'Connection failed'; }
现在这段代码运行得很好。它打印出每个在AD中具有显示名称的用户。 问题是用户名/密码绑定我使用自己的用户凭证绑定到服务器。
我想知道是否有办法使用服务器凭据进行绑定。
我在Windows Server 2008 R2上使用PHP 5.3 + IIS安装了带IIS的服务器和带有AD的服务器。(两个不同的虚拟机)。
我也知道IIS有一个名为IISStackOverflow的AD帐户,但我不知道密码,即使它有密码......
谢谢!
哦!我尝试将$username
更改为IISStackOverflow
,将$password
更改为''
但是它提供了无效的凭据错误。
- 编辑 -
我是否必须完成绑定部分? (如果我只是在阅读数据)
答案 0 :(得分:2)
当你从服务器本身运行它时,你只想阅读我会尝试使用:
...
if(ldap_bind($ldap))
...
根据PHP documentation,如果未指定bind_rdn和bind_password,则尝试匿名绑定。
然后,如果您的匿名登录被拒绝(这不应该是,因为在服务器上的IIS下运行,您的代码至少作为域用户执行),您将找到how to enable anonymous LDAP binds to Windows Server。这曾经在W2K8上工作过,我不会在W2K12上测试它。