2016-11-30 122 views
1

我正在使用Mr. Sam J Levy PHP LDAP身份驗證script。我根本不熟悉Microsoft Active Directory。所以我不確定我需要輸入的是$ldap_user_group = "WebUsers";$ldap_manager_group = "WebManagers";。對於我公司的AD,用戶的賬戶分爲不同的部門和地點。我瞭解腳本的其餘部分,我只是不確定我應該如何去WebUsers和WebManagers。任何幫助表示讚賞。如何使用PHP進行LDAP驗證

這是一個完整的腳本:

<?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; 
} 
} 
?> 
+0

使用Apache DS或jXplorer等工具查看貴公司的LDAP/AD。 – heiglandreas

回答

0

他是用在對從ldap_get_entries回來$項檢查的2個變量。他試圖確定用戶是「經理」還是「用戶」......這部分可能是他的企業所特有的......並且您可能無需走過這麼遠......只需評論這些變量出來了,並且還會在//檢查組之後註釋掉部分

然後,您可以檢查$條目以查看您的企業的外觀,然後從中去。

+0

謝謝Wes回覆。實際上我想檢查用戶是「經理」還是「用戶」,但在我公司的AD中,我們沒有「用戶」文件夾和下面有用戶的「用戶」文件夾,我們應該這樣做嗎?此外,如果我評論這一部分,我會得到一個錯誤「失敗:錯誤的用戶名,密碼或權利」。 –

+0

我覺得我的幫助不大......但我可以說,如果你評論這些東西,你應該從該方法返回true,因爲它會越過綁定,這意味着用戶名和密碼是正確的。 – Wes