2012-02-27 4 views
1

У меня есть страница входа в систему, в которой PHP/LDAP для моих пользователей используется для доступа к веб-сайту компании. Ниже я создал оператор, который хранит членство в AD группы пользователя в переменной, которая будет использоваться позже для перенаправления в зависимости от того, какое членство у пользователя в AD>Получение полного имени пользователя из Active Directory с использованием PHP

Теперь я хотел бы также добавить возможность получить полное имя пользователя из Active Directory и сохраните его для последующего использования. Как я могу изменить свой оператор ниже, чтобы сохранить полное имя пользователя из Active Directory в другую переменную? Есть идеи??

// 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); 
    /* I would like to get and store the user's display name here somehow */ 
    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; 

Заранее благодарю за помощь/предложения!

EDIT

Вот теперь моя полный PHP страница с фиктивной вещью домена, но я получаю ошибку синтаксиса и я могу проблему :(и помочь или идее? Спасибо Алексу за первоначальную помощь!

<?php 
function authenticate($user, $password) { 
    // Active Directory server 
    $ldap_host = "my FQDC DC"; 

    // Active Directory DN 
    $ldap_dn = "DC=something,DC=something"; 

    // Active Directory user group 
    $ldap_user_group = "WebUsers"; 

    // Active Directory manager group 
    $ldap_manager_group = "WebManagers"; 

    // Domain, for purposes of constructing $user 
    $ldap_usr_dom = "@mycompany.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","givenname"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    $givenname = $entries[0]['givenname']; 
    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; 
     $_SESSION['givenname'] = $givenname; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 
} 

?> 
+0

Можете ли вы отправить сообщение об ошибке? –

+0

Привет, Алекс, у меня не было скобки в конце; извините за ошибку новобранец. : S Спасибо за вашу помощь! – user1236435

ответ

2

Попробуйте следующее:

// 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","givenname"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    $givenname = $entries[0]['givenname'][0]; 
    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; 
     $_SESSION['givenname'] = $givenname; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 
} 
+0

Алекс, я думаю, что вы правы в кодировании, но я получаю синтаксическую ошибку, и я не могу определить проблему. Любая идея об ошибке ?? – user1236435

0

Надеется, что это помогает. Когда вы читаете из LDAP вы можете увидеть поля и сопоставить их с некоторыми переменным сеансом.

$connect = @ldap_connect(LDAP_ADDRESS); 
    if (!$connect) return FALSE; 

    $bind = @ldap_bind($connect); 
    if (!$bind) return FALSE; 

    if ($resource = @ldap_search($connect,"dc=<yourdc>,dc=<yourdc>","uid=$user")) { 

     if (@ldap_count_entries($connect,$resource) == 1) { 

      if ($entry = @ldap_first_entry($connect,$resource)) { 

       if ($user_dn = @ldap_get_dn($connect,$entry)) { 

        if ($link = @ldap_bind($connect,$user_dn,$password)) { 

         $_SESSION['user'] = $user; 

        } 
       } 
      } 
     } 
    } 

    @ldap_close($connect); 
0

Натыкаясь на старую нитку. Мне нужно, чтобы получить имя и фамилию и добавил «зп» к атрибутам и добавлены к сессии переменных для последующего использования в другой сценарий, как это:

Как получить доступ к сессии переменных в других сценариях:

$givenname = $_SESSION['givenname']; 
$surname = $_SESSION['sn']; 
$name = "{$givenname} {$surname}"; 

Обновление предыдущей AUTHENTICATE сценария:

// 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","givenname","sn"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    $givenname = $entries[0]['givenname'][0]; 
    $surname = $entries[0]['sn'][0]; 
    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; 
     $_SESSION['givenname'] = $givenname; 
     $_SESSION['sn'] = $surname; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 
} 
Смежные вопросы