Active Directory — LDAP входа в сессию в PHP с правами доступа

Я новичок в PHP и работаю над сценарием входа LDAP, который будет входить на сервер LDAP с использованием учетных данных организации, а затем проверять имя пользователя и пароль пользователя в Active Directory.
Есть несколько хороших примеров, и я смотрел на этот, изменив его в соответствии с моими конкретными потребностями.
У меня такой вопрос: в старой системе моей организации (в Classic ASP) было 2 функции:

  1. BindReturnUPN(username,domain) (это вернет 'userPrincipalName')

  2. BindAuthUPN(upn,password) (это займет 'userPrincipalName' от BindReturnUPN функция, а затем вернуть error number а также error description который будет определять, был ли пользователь вошел в систему.)

Есть ли в этом примере PHP аналогия с двумя функциями, используемыми в системе Classic ASP?
Я думал, что могу использовать журнал организации в учетных данных «жестко запрограммирован» для доступа к LDAP, а затем искать соответствующие имя пользователя и пароль (из формы), хотя я не уверен, как будет проверяться привязка для их. Возможно внутреннее условие if / then для проверки привязки имени пользователя / пароля, в рамках проверки привязки учетных данных внешней организации?
Этот скрипт работает для меня, показывая, что я успешно вошел в систему, но я не уверен насчет привязки и того, как проверить имя пользователя / пароль в AD. Спасибо за любые предложения.

Вот мой код до сих пор ( $_SESSION['access'] переменная определяет, вошел ли пользователь в систему):

login.php

<?php
// initialize session
session_start();

include("authenticate.php");

// check to see if user is logging out
if(isset($_GET['out'])) {
// destroy session
session_unset();
$_SESSION = array();
unset($_SESSION['user'],$_SESSION['access']);
session_destroy();
}

// check to see if login form has been submitted
if(isset($_POST['userLogin'])){
// run information through authenticator
if(authenticate($_POST['userLogin'],$_POST['userPassword']))
{
// authentication passed
header("Location: protected.php");
die();
} else {
// authentication failed
$error = 1;
}
}

// output error to user
if(isset($error)) echo "Login failed: Incorrect user name, password, or rights<br />";

// output logout success
if(isset($_GET['out'])) echo "Logout successful";
?>

<form action="login.php" method="post">
User: <input type="text" name="userLogin" /><br />
Password: <input type="password" name="userPassword" />
<input type="submit" name="submit" value="Submit" />
</form>

authenticate.php

<?php
function authenticate($user, $password) {
if(empty($user) || empty($password)) return false;

// active directory server
$ldap_host = "server.college.school.edu";


// active directory DN (base location of ldap search)
$ldap_dn = "OU=Departments,DC=college,DC=school,DC=edu";


// active directory user group name
$ldap_student_group = "ALL-STUDENTS";


// domain, for purposes of constructing $user
$ldap_usr_dom = 'college\web-account';


$ldap_password = "password_students";


// connect to active directory
$ldap = ldap_connect($ldap_host);

// configure ldap params
ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($ldap,LDAP_OPT_REFERRALS,0);

// verify user and password
//if($bind = @ldap_bind($ldap, $user.$ldap_usr_dom, $password)) {
if($bind = @ldap_bind($ldap, $ldap_usr_dom, $ldap_password)) {
// valid
// check presence in groups
//$filter = "(sAMAccountName=".$user.")";
$filter = "(cn=".$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
$access = 0;
foreach($entries[0]['memberof'] as $grps) {
// is student group, break loop
if(strpos($grps, $ldap_student_group)) { $access = 2; break; }

}

if($access != 0) {
// establish session variables
echo '<br>access'.$access.'<br>';

$_SESSION['user'] = $user;
$_SESSION['access'] = $access;
return true;
} else {
// user has no rights
return false;
}

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

protected.php

<?php
// initialize session
session_start();
echo '<br>access'.$_SESSION['access'].'<br>';
if(!isset($_SESSION['user'])) {
// user is not logged in, do something like redirect to login.php
header("Location: login.php");
die();
}

if($_SESSION['access'] != 2) {
// another example...
// user is logged in but not a student, let's stop him
die("Access Denied");
}
?>

<p>Welcome <?= $_SESSION['user'] ?>!</p>

<p><strong>Secret Protected Content Here!</strong></p>

<p>Mary Had a Little Lamb</p>

<p><a href="login.php?out=1">Logout</a></p>

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]