首页 文章

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

提问于
浏览
2

我有一个IIS应用程序(AngularJS和PHP),使用 Windows Authentication 进行身份验证(禁用匿名身份验证) . 我希望有一个按钮,无论何时单击,将查找活动目录用户 . 它可以使用以下代码成功运行:

$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参数调用它,但我总是得到同样的错误: Unable to search ldap server: Operations error (1)

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

谢谢!

1 回答

  • 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

相关问题