【问题标题】:ActiveDirectoryMembershipProvider "The specified domain or server could not be contacted."" ActiveDirectoryMembershipProvider "无法联系指定的域或服务器。"
【发布时间】:2010-11-19 02:55:44
【问题描述】:

我有一个应用程序正在使用 ActiveDirectoryMembershipProvider 向用户授予访问权限。应用程序托管在非域机器上,应用程序服务器和域控制器之间有防火墙。

我们已经在内部网络上打开了到 DC 的 LDAP 端口 - 但无论我们尝试什么,最终都会出现“无法联系指定的域或服务器”的错误消息。

有人对我如何解决这个问题有任何建议吗?我们已经尝试了我们能想到的一切,但还是没有成功。

我的连接字符串是:

<add name="ADConnectionString"
    connectionString="LDAP://10.5.3.7:389/DC=MyTestDomain,DC=local"/>

我的提供者是:

<add name="ActiveDirectoryMembershipProvider"
    type="System.Web.Security.ActiveDirectoryMembershipProvider"
    connectionStringName="ADConnectionString"
    attributeMapUsername="SAMAccountName"
    connectionProtection="None"
    connectionUsername="LdapUser"
    connectionPassword="LdapPassword"   />

【问题讨论】:

    标签: asp.net asp.net-membership ldap activedirectorymembership


    【解决方案1】:

    应用程序托管在非域计算机上,应用程序服务器和域控制器之间有防火墙。

    由于您可以直接使用 LDAP 工具进行查询,这表明防火墙已正确打开。但是,请记住,ActiveDirectoryMembershipProvider 不是使用普通的旧 LDAP,而是使用 Microsoft 技术。例如,如果您设置connectionProtection="Secure",ADMP 将尝试使用 SSL 和端口 636,如果失败,它将使用 Microsoft 内置的 IPSec 签名(更多详细信息请参阅this article)。

    无论如何,这让我想知道一些事情:

    1. AD 域是否具有拒绝来自非域/未配置计算机的连接的 IPSec“必需”策略? (可能不是,因为您连接的是普通 LDAP,但值得研究。)
    2. 您是否已将域控制器的 NetBIOS 名称添加到您的 lmhosts 文件中,并将其 DNS 名称添加到您的 hosts 文件中? (许多协议会检查其目标报告的名称是否与您尝试连接的名称相匹配。)
    3. 很多人都注意到在不同域之间使用 ADMP 的问题,解决方案需要创建单向信任。由于听起来您的客户端计算机不在域中,因此您无法获得该信任-除非(a)它是具有单向信任的不同域的成员,或者(b)它是相同的域,因此客户端-服务器信任是隐式的。

    【讨论】:

    • 您的第二点让我找到了解决方案!显然,在我们的测试服务器上更改了 DNS 的名称,这仅导致 ADMP 失败,而其他所有方法都有效!但是,我目前的解决方法是在我的 LDAP 连接字符串中使用 IP 地址而不是主机名,这与 Scott 设置它的方式完全相同(相反,我不提供端口号,我让它自动选择) .
    【解决方案2】:

    看来解决办法是打开445端口。

    Read this thread

    我们不允许打开,所以我想我被卡住了。

    【讨论】:

    • 打开端口 445 对我有用。我可以使用我的 LDAP 连接字符串通过System.DirectoryServices.DirectoryEntry(...) 进行连接,但是任何通过ActiveDirectoryMembershipProvider 进行连接的尝试都会产生以下错误:The specified domain or server could not be contacted。打开这个端口解决了这个问题。
    【解决方案3】:

    你可以用这两篇文章,也许能解决你的问题

    www.ddj.com/windows/184406424

    forums.asp.net/t/1408268.aspx

    并检查您的防火墙

    【讨论】:

      【解决方案4】:

      我遇到了这个错误,并设法修复它。导致这种情况的原因有很多,这里有一个待办事项列表来确定确切的问题:

      1. 创建一个微应用,使用单一方法 Membership.GetAllUsers(),在 Active Directory (AD) 之外的机器上执行,连接字符串中的密码不正确,检查是否出现密码错误异常。如果你没有得到它你不能连接到你的AD服务器,检查防火墙,如果你确实得到了无效密码异常,进入下一步。

      2. 如果可以,尝试在 AD 服务器上本地执行相同的应用程序,首先使用不正确的密码,而不是正确的,在本地执行应用程序提供更详细的异常什么是错误的(对我来说,这个异常导致我修复问题)。在我的情况下,它告诉我服务器服务没有启动,而不是工作站服务没有启动。

      关于它需要服务器和工作站服务在服务器上工作的一些想法:afaik 服务器服务用于 Windows 文件共享(基于 TCP 的 netbios),并且使用 445 端口,所以这个端口必须除了 LDAP 端口外,还要打开。我的第二个观察是,如果 445 端口打开(netstat -an)它仍然无法工作,如果 Windows 客户端和文件和打印机共享复选框未在接收此数据包的网络接口适配器上选中,winows 会将所有数据包丢弃到该端口.检查“telnet External_IP 445”。这就是我在解决这个问题时收集的所有信息。

      【讨论】:

        【解决方案5】:

        您是否使用 LDAP 浏览工具进行了测试,从远程框看它是否可以连接到这里使用的标准? IE。是连接问题还是其他原因?

        【讨论】:

        • 是的 - 我们可以使用 LDAP 工具使用相同的信息进行查询。这让我很困惑。我确实注意到的一件奇怪的事情是 AD 成员资格提供程序试图获取您正在连接的服务器的 NetBIOS 名称(用反射器挖出来) - 在此期间有一个 try/catch 会抛出确切的消息我们得到的。不知道为什么提供商认为它需要服务器的 netbios 名称。
        【解决方案6】:

        以防万一有人偶然发现这一点并想把头砸在墙上...最近尝试为我公司在与当前上下文不同的域中的 AD 服务器执行所有这些操作。正在使用提供的 IP 并出现故障,如此处所述。甚至使用了像 Softerra LDAP Admin 这样的工具,它工作得很好,但是 AccountManagement 失败了。

        我们有一个与该 IP 地址挂钩的公开 URL(仍然只允许某些 IP 进行调用)。一旦我用提供的 URL 替换了 IP,它就像一个魅力。

        希望这可以节省我刚刚让自己经历的时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-31
          • 2013-01-25
          • 1970-01-01
          相关资源
          最近更新 更多