2008-09-17 35 views
1

我有以下代码:如何使用COM从PHP/IIS读取Active Directory组成员身份?

$bind = new COM("LDAP://CN=GroupName,OU=Groups,OU=Division,DC=company,DC=local"); 

当我从一个命令提示执行它,它运行良好。当它在IIS/PHP/ISAPI下运行时,它会发生故障。

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登录(这是预期的)。

回答

2

由于您使用Windows身份验证在IIS中,您可能在Windows事件日志中有一些安全事件。我会检查事件日志中的安全事件以及应用程序事件,看看您是否遇到任何类型的权限问题。

此外,由于您基本上只是通过LDAP与AD通信......您可能会考虑使用PHP的本机LDAP库而不是COM。

你必须在你的php.ini中启用扩展。值得期待的可能。

0

好吧,如果你想使用LDAP,让我指出你我们使用马亚则MailGuard LDAP验证码:看名为lauth_ldap

我认为,这需要LDAP版本3的功能,所以你必须为ldap设置该参数。要验证密码,我们使用ldap绑定功能让ldap服务器进行身份验证。

0

我不是AD/COM/IIS专家,但它可能是一个权限问题。例如,IUSR_computername用户在目录中没有适用的访问权限,或者您没有作为特定用户进行绑定?

对我来说,警钟是它从命令行运行正常(例如使用您的权限运行)但在IIS上失败(例如,您的权限不正确)。

+0

在这种情况下不使用IUSR帐户。事实上,我可以建立一个数据库的连接,并通过证书(PHP中的odbc_connect),所以我有证据表明身份验证部分正在工作。 – Martin 2008-09-17 16:21:39

2

它似乎现在工作。

我为Active Directory中的计算机对象启用了“信任此计算机进行委派”。通常,IIS不能同时验证你,然后在没有启用委托信任的情况下,通过网络模拟你(在我的情况下,模拟到域控制器来查询Active Directory)。

您只需确保它使用Kerberos进行身份验证,而不是使用NTLM或其他摘要身份验证,因为摘要不被用作模拟令牌。

它修复了我的PHP和ASP脚本。

相关问题