是否可以使用PHP将LDAP与当前登录用户绑定


Is it possible to bind LDAP with current logged on user with 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(),只使用$connect参数调用它,但我总是得到相同的错误:无法搜索ldap服务器:操作错误(1)

当然,我可以在PHP中存储一个专用的user+通行证,但我希望避免这种情况,并使用登录用户身份验证。

谢谢!

您可以使用以下PHP+Powershell解决方案在服务器端实现LDAP和其他类型的通信。下面的代码示例允许我基于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