我有以下代码:

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

有帮助吗?

解决方案

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

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

您必须在 php.ini 中启用该扩展。或许值得一看。

其他提示

现在似乎正在发挥作用。

我为 Active Directory 中的计算机对象启用了“信任此计算机进行委派”。通常,如果没有启用委派信任,IIS 无法对您进行身份验证,然后通过网络模拟您(在我的例子中,模拟到域控制器来查询 Active Directory)。

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

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

好吧,如果您想使用 LDAP,请让我向您介绍我们用于 Maia Mailguard 的 LDAP 身份验证代码:寻找名为的函数 劳斯_ldap

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top