2012-12-06 74 views
1

好的...我已经在这里挖掘了示例等,并且仍然存在问题。验证用户是ldap/active directory安全组的一部分

<?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是该小组的一部分,这就是它想要说的。它还对另一个不属于该安全组的用户名/密码表示这一点。

回答

1

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

+1

另请注意,如果您需要解决嵌套组成员,你将需要使用Active Directory对LDAP_MATCHING_RULE_IN_CHAIN,它看起来像'的memberOf:1.2.840.113556.1.4.1941:='。有关搜索过滤器语法的更多信息,请参阅http://msdn.microsoft.com/zh-cn/library/aa746475(VS.85).aspx。 – JamieSee

+0

@ hall72215谢谢......这样做......这么简单的事情让我失望了。 和JamieSee ...感谢以及我会记住这一点。不确定你在说什么。我是这个ldap东西的小菜鸟。 – user1883053

0
  1. 必须定义SAM帐户在你的过滤器

    //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."); 
    
相关问题