Можно ли связать LDAP с текущим вошедшим в систему пользователем с помощью PHP?

У меня есть приложение 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, но хотел бы избежать этого и использовать аутентификацию вошедшего в систему пользователя.

Спасибо!

2

Решение

Вы можете достичь 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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]