Аутентификация по ldap с использованием PHP, active directory, при использовании IE/Firefox


Этот код ниже проверяет учетные данные пользователя на соответствие ldap

<?php
$ldaphost = "ldap.domain.com";
$ldapport = 389;

$ds = ldap_connect($ldaphost, $ldapport)
or die("Could not connect to $ldaphost");

if ($ds) 
{
    $username = "[email protected]";
    $upasswd = "pass";

    $ldapbind = ldap_bind($ds, $username, $upasswd);

    if ($ldapbind) 
        {print "Congratulations! $username is authenticated.";}
    else 
        {print "Access Denied!";}
}
?>

Мои пользователи используют Firefox и IE, и я знаю, что они могут беспрепятственно передавать свои учетные данные ActiveDirectory.

Я просто хочу проверить группу объявлений, чтобы узнать, есть ли там это имя пользователя, если да, отобразите страницу, в противном случае попросите ввести учетные данные.

Поскольку наши пользователи уже вошли в контроллер домена, я хочу получить их имя пользователя, проверить, было ли оно найдено в определенной группы, затем впустите их, в противном случае попросите пользователя ввести учетные данные. Как это возможно?

Author: Travis Heseman, 2009-10-06

2 answers

На самом деле вам не нужно связываться с сервером Active Directory из вашего кода PP, чтобы достичь желаемого, учитывая тот факт, что вы используете IIS в качестве своего веб-сервера.

Ключевое слово здесь - Встроенная проверка подлинности Windows - это формулировка, которую искал djn . Если этот параметр включен (и анонимный доступ запрещен), службы IIS проверят предоставленные учетные данные на соответствие Active Directory и привилегиям файловой системы NTFS запрошенные ресурсы. Таким образом, вы можете контролировать доступ к своим файлам с помощью простых механизмов контроля доступа NTFS.

Если ваши пользователи используют IE, им даже не нужно вводить свои учетные данные, поскольку это делается автоматически с помощью так называемого SPNEGO (Простой и защищенный механизм согласования GSSAPI) и его базовых механизмов Kerberos или NTLMSSP в зависимости от того, что ваш клиент и сервер способны обрабатывать.

Насколько я знаю, Firefox способен также автоматически передайте учетные данные для входа в систему Windows на свой сервер. Вам нужно настроить параметр конфигурации , чтобы включить эту функцию - не знаю, действительна ли эта информация в Firefox 3.5.x.

Если вы используете Apache в *nix-системе, вам придется прибегнуть к какому-либо серверному модулю для обработки Встроенной системы аутентификации Windows, подобной системе. Возможные варианты (не знаю, поддерживаются ли они на самом деле или стабильный):

Для Apache в Windows есть:

  • mod_ntlm ( устаревший; не такой, как mod_ntlm выше)
  • mod_auth_sspi ( преемник mod_ntlm)

Пожалуйста, имейте в виду, что большинство этих модулей кажутся очень старыми.

 7
Author: Stefan Gehrig, 2017-05-23 10:29:36

Только что работал над аналогичной настройкой: я пропустил все эти вещи LDAP, когда веб-сервер аутентифицировал клиента с помощью AD, прежде чем впустить его (извините, я не могу вспомнить, как это называется в альтернативной вселенной M$).

Если клиент достигает PHP-скрипта, он находится в AD, и у меня есть его имя пользователя как в $_SERVER["AUTH_USER"], так и в $_SERVER["LOGON_USER"], иначе он никогда не доберется до скрипта.

 1
Author: djn, 2009-10-06 22:27:24