1

我有以下代码:

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

4

4 回答 4

3

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

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

您可能必须在 php.ini 中启用扩展。大概值得一看。

于 2008-09-17T15:59:22.577 回答
2

它现在似乎正在工作。

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

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

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

于 2008-09-17T17:34:59.557 回答
0

好吧,如果你想使用 LDAP,让我指出我们用于 Maia Mailguard 的 LDAP 身份验证代码:查找名为lauth_ldap的函数

我认为它需要 ldap 版本 3,因此您必须为 ldap 设置该参数。为了验证密码,我们使用 ldap 绑定函数让 ldap 服务器进行身份验证。

于 2008-09-17T16:03:43.910 回答
0

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

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

于 2008-09-17T16:14:11.670 回答