Аутентификация по 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.

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

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


person Brad    schedule 06.10.2009    source источник
comment
Где-то есть вопрос?   -  person Marc W    schedule 06.10.2009
comment
Отлично. Спасибо. знак равно   -  person Marc W    schedule 07.10.2009


Ответы (2)


На самом деле вам не нужно связываться с сервером 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)

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

person Stefan Gehrig    schedule 07.10.2009

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

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

person djn    schedule 06.10.2009