У меня есть приложение IIS (AngularJS и PHP), проверка подлинности выполняется с Проверка подлинности Windows (Анонимная аутентификация отключена). Я хотел бы иметь кнопку, которая при каждом нажатии будет искать активных пользователей каталога. Он успешно работает с кодом ниже:
$ldap_server = "ldap://MyDomain.local";
$auth_user = "MyUser@MyDomain";
$auth_pass = "myPass";
$base_dn = "OU=MyDomain, DC=MyDomain, DC=local";
$filter = "(&(objectClass=user)(objectCategory=person)(cn=*))";
if (!($connect=@ldap_connect($ldap_server))) {
die("Could not connect to ldap server");
}
if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
die("Unable to bind to server: ". ldap_error($connect) . " (" . ldap_errno($connect) . ")");
}
if (!($search=@ldap_search($connect, $base_dn, $filter))) {
die("Unable to search ldap server: ". ldap_error($connect) . " (" . ldap_errno($connect) . ")");
}
Однако пользователь уже предоставил учетные данные при входе в систему (через проверку подлинности IIS Windows), и я хотел бы использовать те же учетные данные пользователя (или фактически выдавать себя за пользователя).
Могу ли я сделать это без запроса имени пользователя и пароля?
Я пытался получить переменные сервера ({$ _SERVER [ ‘AUTH_USER’]} а также {$ _SERVER [ ‘AUTH_PASSWORD’]}). Только пользователь заполнен (имеет смысл …).
Я тоже пробовал пропускать ldap_bind (), называя это только с $ подключить параметр, но я всегда получаю ту же ошибку:
Невозможно найти ldap сервер: ошибка операций (1)
Конечно, я могу сохранить выделенный пользовательский + пароль в PHP, но хотел бы избежать этого и использовать аутентификацию вошедшего в систему пользователя.
Спасибо!
Вы можете достичь LDAP и других типов связи на стороне сервера, используя следующее решение PHP + Powershell. Пример кода ниже позволяет мне показать или скрыть содержимое веб-страницы на основе LOGON_USER (ng-if — это директива AngularJS, которую я использую, чтобы показать / скрыть содержимое):
PHP:
<span ng-if="<?php $ADUserName = $_SERVER['LOGON_USER'];$output = shell_exec('powershell -file chkgrp.ps1 -ADUserName "'.$ADUserName.'"');echo $output; ?>">YOUR HTML CODE</span>
chkgrp.ps1:
Param([string]$ADUserName); Import-Module ActiveDirectory; $User=$ADUserName.split("\")[1]; $Group="YOUR GROUP"; $Members = Get-ADGroupMember -Identity $Group -Recursive | Select -ExpandProperty SamAccountName; If ($Members -contains $User) {write-output "true"} Else {write-output "false"}
-CJ
Других решений пока нет …