验证用户是ldap / active目录安全组的一部分

时间:2012-12-06 16:51:54

标签: php active-directory ldap

好的......我已经在这里挖掘了示例等,我仍然遇到问题。

<?php
// SHOW ERRORS 0=NO 1=YES
ini_set('display_errors', '1');


//USER
$valid_session_username = $_POST["username"];
$valid_session_password = $_POST["password"];

//MEMBER OF THIS GROUP
$dn = "DC=FLRC,DC=local";
$group = "CN=Internet-Purchasing-Allowed,OU=Security Groups,DC=FLRC,DC=LOCAL";
$filter = "(&(objectClass=user)(memberOf=$group))";


$ad = ldap_connect("srv-flc-dc03") or die("Couldn't connect to AD!");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($ad, LDAP_OPT_REFERRALS,0);
$bd = ldap_bind( $ad, $valid_session_username."@flrc.local", $valid_session_password) or die("Can't bind to server.");
$sr = ldap_search($ad, $dn, $filter);


$found = false;

if ($sr !== false) {
    $count = ldap_count_entries ($ad, $sr);
    if ($count !== false && $count > 0) {
     $found = true;
    }
}

if ($found === true) {
    print $valid_session_username.' does have access to this page';
} else {
    print $valid_session_username.' does NOT have access to this page';
}


?>

我不知道我错过了什么。当我提交我的凭据时,它说“SRAY确实可以访问此页面”。这是因为SRAY是该组的一部分。它还说明了另一个不属于该安全组的用户名/密码。

2 个答案:

答案 0 :(得分:1)

您的过滤器正在寻找任何用户,该用户是Internet-Purchasing-Allowed组的直接成员。您需要将(sAMAccountName = $ valid_session_username)添加到您的过滤器。

答案 1 :(得分:0)

  1. 您必须在过滤器中定义 sAMAccountname

    //MEMBER OF THIS GROUP
    $dn = "DC=FLRC,DC=local";
    $group = "CN=Internet-Purchasing-Allowed,OU=Security Groups,DC=FLRC,DC=LOCAL";
    $filter = "(&(objectClass=user)(sAMAccountname=".$valid_session_username.")(memberOf=".$group."))";
    
  2. 您必须将LDAP与具有必要权限的帐户绑定。在所有“OU =安全组”上创建一个具有读取权限的管理员帐户。然后在代码中与它绑定。

    $bd = ldap_bind( $ad, $admin_session_username."@flrc.local", $admin_session_password) or die("Can't bind to server.");