Аутентификация по 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.
Я просто хочу проверить группу объявлений, чтобы узнать, есть ли там это имя пользователя, если да, отобразите страницу, в противном случае попросите ввести учетные данные.
Поскольку наши пользователи уже вошли в контроллер домена, я хочу получить их имя пользователя, проверить, было ли оно найдено в определенной группы, затем впустите их, в противном случае попросите пользователя ввести учетные данные. Как это возможно?
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
)
Пожалуйста, имейте в виду, что большинство этих модулей кажутся очень старыми.
Только что работал над аналогичной настройкой: я пропустил все эти вещи LDAP, когда веб-сервер аутентифицировал клиента с помощью AD, прежде чем впустить его (извините, я не могу вспомнить, как это называется в альтернативной вселенной M$).
Если клиент достигает PHP-скрипта, он находится в AD, и у меня есть его имя пользователя как в $_SERVER["AUTH_USER"]
, так и в $_SERVER["LOGON_USER"]
, иначе он никогда не доберется до скрипта.