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

时间:2016-05-04 07:35:33

标签: php ldap windows-authentication

我有一个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&# 39;]} )。只填充用户(有意义......)。

我还尝试跳过 ldap_bind(),仅使用 $ connect 参数调用它,但我总是得到同样的错误: 无法搜索ldap服务器:操作错误(1)

当然我可以在PHP中存储专用的用户+传递,但是想要避免这种情况并使用登录的用户身份验证。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下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