2012-12-06 73 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."); 
    
相關問題