2016-11-30 6 views
1

私はSam J Levy PHP LDAP認証scriptを使用しています。私はMicrosoft Active Directoryについてはあまりよく知らない。だから私は$ldap_user_group = "WebUsers";$ldap_manager_group = "WebManagers";のために何を入れなければならないのか分かりません。私の会社の広告では、ユーザーのアカウントは異なる部門や場所に分かれています。私はスクリプトの残りの部分を理解していますが、私はWebUserとWebManagerにどのように手を差し伸べるのか分かりません。どんな助けもありがとうございます。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

返信いただきありがとうございます。私は実際には、ユーザーが "マネージャ"か "ユーザー"かどうかをチェックしたいと思いますが、私の会社のADでは、ユーザーの下に「マネージャ」と「ユーザー」フォルダがありません。また、私がその部分をコメントアウトすると、「失敗:不正なユーザー名、パスワード、または権利」というエラーが表示されます。 –

+0

私はあまり助けてくれるとは思っていませんが、あなたがその物をコメントアウトすれば、そのメソッドから真実を返すべきだと言えるでしょう。そうすれば、バインドを過ぎてしまい、ユーザー名とパスワードが正しいということになります。 – Wes

関連する問題