Как работает ldap авторизация на php?

Здравствуйте !

Я начинающий разработчик на php. Недавно столкнулся с технологией ldap , о котором , кстати, я ничего не знал. Поискав в интернете инфу и применив те коды , понял что я окончательно запутался. Вот один из примеров. Тестовый сервер на windows 7, на сайт захожу набрав на браузере testsuper

ФАЙЛ ldap.php

<?php
$ldaphost = "127.0.0.1";
$ldapport = "389";
$memberof = "cn=allow_ppl,ou=users_IT,ou=IT,ou=Kyiv,ou=corp,dc=eddnet,dc=org";
$base = "ou=corp,dc=eddnet,dc=org";
$filter = "sAMAccountName=";
$domain = "@testsuper";
?>


ФАЙЛ index.php
=============

<?php

include_once ("auth.php");
?>
 
  
<head>
<meta charset=utf8 />
<title>Postfix ?????????</title>
</head>
 
<?php
// ????? ??? ????? ?????? ? ?????? 
print '
<form action="index.php" method="post">
<table>
      <tr>
            <td>Log:</td>
            <td><input type="text" name="login" /></td>
      </tr>
      <tr>
            <td>Password:</td>
            <td><input type="password" name="password" /></td>
      </tr>
      <tr>
            <td></td>
            <td><input type="submit" value="Authorization" /></td>
      </tr>
</table>
</form>
';
?>


=============

ФАЙЛ auth.php

<?php
//???????? ??????
session_start();
//?????????? ???????????????? ????
include_once ("ldap.php");
 
// Logout
if (isset($_GET['logout']))
{
      if (isset($_SESSION['user_id']))
            {
            unset($_SESSION['user_id']);  
            setcookie('login', '', 0, "/");
            setcookie('password', '', 0, "/");
            header('Location: index.php');
            exit;
      }
}
 
//???? ???????????? ??? ????????????????, ?? ??????????? ??? ?? ???????? main.php
if (isset($_SESSION['user_id']))
      {
	  echo "<script>alert('Success')</script>";
      header('Location: main.php');
      exit;
}
 
//???? ???????????? ?? ????????????????, ?? ????????? ??? ????????? LDAP
if (isset($_POST['login']) && isset($_POST['password']))
      {
      $username = $_POST['login'];
      $login = $_POST['login'].$domain;
      $password = $_POST['password'];
      //?????????????? ? LDAP ???????
      $ldap = ldap_connect($ldaphost,$ldapport) or die("Cant connect to LDAP Server");
      //???????? LDAP ???????? ?????? 3
      ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
 
      if ($ldap)
            {
            // ???????? ????? ? LDAP ??? ?????? ????????? ?????? ? ??????
            $bind = ldap_bind($ldap,$login,$password);
 
            if ($bind)
                  {
                  // ????????, ???????? ?? ???????????? ?????? ????????? ??????.
                  $result = ldap_search($ldap,$base,"(&(memberOf=".$memberof.")(".$filter.$username."))");
                  // ???????? ?????????? ??????????? ?????????? ????????
                  $result_ent = ldap_get_entries($ldap,$result);
            }
            else
                  {
				  echo "<pre>";
				  print_r($_SESSION);
				  echo "</pre>";
                  die('You entered wrong password or id. Try it now<br /> <a href="index.php">to back</a>');
            }
      }
      // ???? ???????????? ??????, ?? ?????????? ??? ?????? ? ????????????? ?? main.php
      if ($result_ent['count'] != 0)
            {
            $_SESSION['user_id'] = $login;
            header('Location: main.php');
            exit;
      }
      else
            {
            die('Access denied! <br /> <a href="index.php">to Back</a>');
      }
}
?>


Меня волнует следующие вопросы:
1) как работает ldap?
2) где оно то есть ldap хранит данные и вообще как проводится авторизация если до этого никаких юзеров не было? (это самое интересное так как я выводил и $_SERVER и.т.п)
3) что мне прочитать чтобы побыстрее вникнуть в ldap?
4) не проще ли хранить данные в БД и проверять данные оттуда(то есть login pass)?

С Уважением,
Алмик
  • Вопрос задан
  • 13518 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для ldap-авторизации необходим, соответственно, ldap-сервер. Основных вариантов два - OpenLDAP и MS Active Directory. Достоинства метода - единое централизованное хранение всех пользователей для подавляющего большинства серверов.
Судя по данным из примера ldap-сервер поднят на том же компьютере, что и web-сервер, домен называется 'testsuper', корень домена eddnet.org, подразделение в Киеве, для авторизации пользователь должен входить в группу 'allow_ppl'.
Почитать можно вводную часть "Руководства администратора OpenLDAP 2.4", для понимания общих принципов должно хватить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы