如何使用PHP通过LDAP进行身份验证

如何使用PHP通过LDAP进行身份验证,php,authentication,active-directory,ldap,Php,Authentication,Active Directory,Ldap,我正在使用Sam J Levy先生的PHP LDAP身份验证。我对Microsoft Active Directory一点也不熟悉。因此,我不确定我必须为$ldap\u user\u group=“WebUsers”输入什么和$ldap\u manager\u group=“WebManagers”。对于我公司的广告,用户帐户分为不同的部门和地点。我理解脚本的其余部分,我只是不确定我应该如何联系网络用户和网络管理员。感谢您的帮助 这是完整的脚本: <?php // Initialize s

我正在使用Sam J Levy先生的PHP LDAP身份验证。我对Microsoft Active Directory一点也不熟悉。因此,我不确定我必须为
$ldap\u user\u group=“WebUsers”输入什么
$ldap\u manager\u group=“WebManagers”。对于我公司的广告,用户帐户分为不同的部门和地点。我理解脚本的其余部分,我只是不确定我应该如何联系网络用户和网络管理员。感谢您的帮助

这是完整的脚本:

<?php
// Initialize session
session_start();

function authenticate($user, $password) {
if(empty($user) || empty($password)) return false;

// Active Directory server
$ldap_host = "192.158.16.73";

// Active Directory DN OU=Accounts,DC=DMM,DC=JED,DC=RUH
$ldap_dn = "CN=Some Name,OU=IT,OU=Office Users,OU=RUH,OU=Accounts,DC=Company,DC=com";

// Active Directory user group
$ldap_user_group = "WebUsers";

// Active Directory manager group
$ldap_manager_group = "WebManagers";

// Domain, for purposes of constructing $user Company.com
$ldap_usr_dom = '@Company.com';

// connect to active directory
$ldap = ldap_connect($ldap_host);

// verify user and password
if($bind = @ldap_bind($ldap, $user.$ldap_usr_dom, $password)) {
    // valid
    // check presence in groups
    $filter = "(sAMAccountName=".$user.")";
    $attr = array("memberof");
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
    $entries = ldap_get_entries($ldap, $result);
    ldap_unbind($ldap);

    // check groups
    foreach($entries[0]['memberof'] as $grps) {
        // is manager, break loop
        if(strpos($grps, $ldap_manager_group)) { $access = 2; break; }

        // is user
        if(strpos($grps, $ldap_user_group)) $access = 1;
    }

    if($access != 0) {
        // establish session variables
        $_SESSION['user'] = $user;
        $_SESSION['access'] = $access;
        return true;
    } else {
        // user has no rights
        return false;
    }

} else {
    // invalid name or password
    return false;
}
}
?>

他使用这两个变量来检查从ldap\u get\u条目返回的$entries。他试图确定用户是“经理”还是“用户”。。。这部分可能是针对他的企业。。。你也许不用走这么远就可以过得去。。。。只需注释掉这些变量,并注释掉//检查组之后的部分


然后,您可以检查$entries,看看它在您的企业中是什么样子的,然后从那里开始。

他使用这两个变量来检查从ldap\u get\u条目返回的$entries。他试图确定用户是“经理”还是“用户”。。。这部分可能是针对他的企业。。。你也许不用走这么远就可以过得去。。。。只需注释掉这些变量,并注释掉//检查组之后的部分


然后,您可以检查$entries,看看它在您的企业中是什么样子,然后从那里开始。

使用Apache DS或jXplorer等工具查看您的公司LDAP/AD。使用Apache DS或jXplorer等工具查看您的公司LDAP/AD。感谢Wes的回复。实际上,我想检查用户是“经理”还是“用户”,但在我公司的广告中,我们没有“经理”和“用户”文件夹,下面没有用户,我们应该这样做吗?另外,如果我把那个部分注释掉,我会得到一个错误“失败:用户名、密码或权限不正确”。我想我帮不了什么忙。。。但是我可以说,如果你对这些东西进行注释,你应该从该方法返回true,因为它将通过绑定,这意味着用户名和密码是正确的。谢谢Wes的回复。实际上,我想检查用户是“经理”还是“用户”,但在我公司的广告中,我们没有“经理”和“用户”文件夹,下面没有用户,我们应该这样做吗?另外,如果我把那个部分注释掉,我会得到一个错误“失败:用户名、密码或权限不正确”。我想我帮不了什么忙。。。但是我可以说,如果你对这些东西进行注释,你应该从该方法返回true,因为它将通过绑定,这意味着用户名和密码是正确的。