我有以下代码:
$bind = new COM("LDAP://CN=GroupName,OU=Groups,OU=Division,DC=company,DC=local");
当我从命令提示符执行它时,它运行正常。当它在IIS / PHP / ISAPI下运行时,它会barfs。
Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `LDAP://CN=...[cut]...,DC=local':
An operations error occurred. ' in index.php
Stack trace:
#0 index.php: com->com('LDAP://CN=...')
#1 {main} thrown
IIS配置为Windows身份验证(没有匿名,没有基本,没有摘要),我作为与命令提示符相同的用户进行连接。我在IIS日志文件或事件日志中找不到任何特定错误。
本练习的主要目的是避免在我的脚本中保留用户凭据,并依赖IIS身份验证将它们传递到活动目录。我知道您可以使用LDAP来完成同样的事情,但据我所知,凭据无法通过。
也许它在某种程度上与我在尝试将其移植到ASP时遇到的错误有关。我收到错误80072020(我正在查找)。
事件日志没有任何异常。没有警告,没有错误。启用了完整的安全审核(安全策略中每个项目的成功和失败),并显示我针对网页进行身份验证的每个用户的成功Windows登录(这是预期的。)
答案 0 :(得分:3)
由于您在IIS中使用Windows身份验证,因此Windows事件日志中可能会有一些安全事件。我会检查事件日志中的安全事件以及应用程序事件,看看是否遇到任何类型的权限问题。
此外,由于您基本上只是通过LDAP与AD进行通信...您可能会考虑使用PHP的本机LDAP库而不是COM。
您必须在php.ini中启用扩展程序。值得一看。
答案 1 :(得分:2)
现在似乎正在运作。
我为Active Directory中的计算机对象启用了“信任此计算机以进行委派”。通常情况下,IIS不能同时对您进行身份验证,然后在没有启用委派信任的情况下通过网络模拟您(在我的情况下是域控制器以查询Active Directory)。
您必须确保使用Kerberos进行身份验证,而不是使用NTLM或其他摘要身份验证,因为不信任摘要可用作模拟令牌。
它修复了我的PHP和ASP脚本。
答案 2 :(得分:0)
好吧,如果你想使用LDAP,让我指出我们用于Maia Mailguard的LDAP身份验证代码:寻找名为lauth_ldap的函数
我认为它需要ldap版本3,所以你必须为ldap设置该参数。要验证密码,我们使用ldap bind函数让ldap服务器进行身份验证。
答案 3 :(得分:0)
我不是AD / COM / IIS专家,但它可能是权限问题。例如,IUSR_computername用户在目录中没有适用的访问权限,或者您没有作为特定用户绑定?
我的警钟是它从命令行运行正常(例如使用您的权限运行)但在IIS上失败(例如,不是您的权限)。