Как я могу подключить веб-приложение PHP к Active Directory? LDAP - единственный способ?
Некоторые ссылки, которые у меня есть https://stackoverflow.com/questions/1003751/how-do-i-use-microsoft-ad-and-php-single-sign-on-web-app
Что ж, Active Directory является LDAP + Kerberos + еще несколько разных мелочей. Официально ты мог аутентифицироваться через Kerberos, но он не предоставит никаких других данных авторизации, которые могут вам понадобиться.
Пока ваш брандмауэр не запрещает это и у вас есть учетная запись пользователя с правильными разрешениями, вы сможете запрашивать Active Directory, используя стандартные библиотеки LDAP PHP, браузеры LDAP и т. Д.
LDAP не требуется. Вы можете использовать аутентификацию на основе утверждений (новая тенденция) с SAML. Библиотека PHP - это Вот.
Попросите администратора сети установить ADFSv2, чтобы AD открывал SAML и WS-Trust конечной точки в вашем приложении. ADFS является бесплатным, и Windows 2008 R2 - правильная ОС для запуска последней версии.
СОВЕТ: Обязательно установите его, чтобы он использовал SQL (а не SQL Express), если вам нужны расширенные функции, такие как обнаружение воспроизведения токена.
Я сейчас работаю над гибридным приложением для моей компании, которое требует аутентификации сотрудников через LDAP / ActiveDirectory
в PHP не так уж сложно авторизоваться против LDAP.
В вашей конфигурации PHP должен быть включен сеанс и ldap.
вот пример базовой аутентификации с PHP
class LDAP_Authentication
{
private $connection;
public function __construct($domain)
{
$this->connection = @ldap_connect($domain);
}
public connected()
{
return $this->connection !== false;
}
public function login($user,$password)
{
return @ldap_bind($this->connection,$user,$password);
}
}
Пример использования:
session_start(); //Single Login
$LDAPAuth = new LDAP_Authentication('domain.internal');
if($LDAPAuth->connected())
{
if($LDAPAuth->login('some_user',"some_pass"))
{
$_SESSION['logged_in'] = true;
$_SESSION['credentials'] = array('some_user','some_pass');
echo 'Welcome';
}else
{
echo 'Try again';
}
}
Возможный метод заключается в использовании JavaScript для достижения этой цели, вы можете определить имя компьютера клиента, имя пользователя, домен с помощью сетевого объекта в WScript, затем вы обнаружите учетные данные, а затем отправите их на сервер для проверки с помощью AD, если есть все Хорошо, тогда сервер создаст сеанс для этого пользователя и ответит объектом JSON, для которого установлено значение true.
тогда сторона javascript увидит, что это успешно, а затем перенаправит браузер в другое место, заставив их войти в систему.
POC:
var Data = {}
//Show loading layer
$("#loader").show();
try
{
var Information = new ActiveXObject("WScript.Network");
Data.Username = Information.UserName;
Data.Computername = Information.ComputerName;
Data.Domain = Information.UserDomain;
$.post("/ldap/ajax/login",Data,fucntion(object){
if(object.success)
{
document.location = "/"; //Will automatically start session.
}else
{
document.location = "/ldap/faild/"; //general login page
}
});
}catch(e)
{
document.location = "/ldap/faild/"; //general login page
}
Вы также можете попробовать SAML. Попробуйте выполнить поиск по запросу «активный каталог SAML» или «SAML apache».
Это правильно? Как я могу подключиться без LDAP?
Если в вашей системе Linux работает Winbind (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/winbind.html), вы могли бы использовать стандартные службы PAM для аутентификации. И, как уже указывалось, вы также можете аутентифицироваться с помощью Kerberos (либо рассматривая его как базу данных паролей, либо фактически принимая токены Kerberos, например, через mod_kerberos Apache).
Использование Kerberos дает вам некоторые преимущества безопасности, если все сделано правильно (поскольку пароли пользователей никогда не проходят через сеть), но вам все равно нужно взаимодействовать с LDAP (или локальной системой, на которой запущен Winbind), чтобы получить членство в группах и т. Д. Для авторизации.