我有一个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中存储专用的用户+传递,但是想要避免这种情况并使用登录的用户身份验证。
谢谢!
答案 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