繁体   English   中英

PHP LDAP使用服务器的用户帐户绑定AD

[英]PHP LDAP binding AD with the server's user account

我有一些使用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的服务器(两个不同的VM)。

我也知道IIS有一个名为IISStackOverflow的AD帐户,但是我不知道密码,即使密码也没有。

谢谢!

哦! 我尝试将$username更改$username IISStackOverflow并将$password''

但是它给出了无效的凭证错误。

- 编辑 -

我是否必须要做绑定部分? (如果我仅读取数据)

从服务器本身运行它时,只要阅读一下,我就会尝试使用:

...
if(ldap_bind($ldap))
...

根据PHP文档,如果未指定bind_rdn和bind_password,则尝试进行匿名绑定。

然后,如果拒绝您的匿名登录(不应该这样,因为在服务器上的IIS下运行您的代码至少是作为域用户执行的),您将在此处找到如何启用与Windows Server的匿名LDAP绑定 这曾经在W2K8上发挥作用,而Inever在W2K12上对其进行测试。

暂无
暂无

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

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