为什么对认证LDAP与间歇性的DirectoryEntry收到COMException抛出(0x80

2019-07-30 12:11发布

如果有人有类似的故事,请发表在下面的详细信息!

我要建一个ASP.NET网站,需要支持对LDAP身份验证。

在Windows中,LDAP身份验证可以通过Active Directory(我不是专家,但AD似乎仅仅是LDAP的特定味)来执行。 我不控制AD和/或LDAP服务器。

我试过认证的各种方法,但我一直在使用一个安定DirectoryEntry每身份验证尝试:

using (DirectoryEntry de = new DirectoryEntry(ldapPath, ldapUsername, password, AuthenticationTypes.ServerBind)) {
    try {
        // Bind to the native AdsObject to force authentication.
        object obj = de.NativeObject;//not IDisposable
    } catch(...

检索NativeObject导致COMException如果有什么任何出错,例如,如果认证失败,例外的是像“登录失败:未知的用户名或密码错误”,如果LDAP服务器无法访问或超时,像“服务器是不可操作“。

这工作,基本上,但天数变化后,总是在启动第一件事就是在早上,我们得到“服务器是不可操作。” 直到重新启动IIS。 这显然不是一个伟大的长期解决方案,但据我可以告诉故障在于COM对象底层的DirectoryEntry - 不是容易解决。

这个 问题 是不是 新的 或 未知的 。 有些人通过微软的混合结果支持了; 基本上答案似乎归结为“把你的LDAP路径,并创建一些等同替换,也许其中的一个将工作”。 每次尝试,或课程时,你不会知道几天是否实际工作,直到真正找到解决方法,我们又回到了“重新启动Windows服务器每天晚上”。

作为一个开始,我已经试过格式LDAP路径

* "LDAP://server.uri:636"
* "LDAP://insecure.server.uri:389"
* "LDAP://server.uri:636/cn=username,ou=staff,o=myOrganisation,c=org"

始终与下面的模式用户名:

* "cn=username,ou=staff,o=myOrganisation,c=org"

所有这些方法最初工作,但几天的可变数量的失败后(并启动IIS复位后工作)。 该服务器运行在Win 2K3 IIS6。

如果任何人有这些问题,请后下,也许最终我们会发现一个模式与工作或有足够数量的例子来说服微软解决这一问题。

Answer 1:

虽然我不能精确地找出这个问题的原因,它似乎已经迁移到非群集服务器后已停止。

有关于这个错误其他奇怪的事实:

  • 重新启动asp.net主机进程不足以解决这个麻烦。 这是奇数; 你所期望的操作系统上的进程死亡强行释放资源
  • 重新启动IIS服务不释放资源(UDP端口)。 netstat的显示端口看起来自由,但打开的所有端口实际上由进程#4中打开 - 系统进程。
  • 杀害 IIS(对于通过IIS管理器实例) 释放UDP端口,然后再认证工作。

总而言之,这看起来很像启用与集群WIN2K3一个驱动程序或内核的问题,而不是一个.NET相关的问题。

因此,如果其他人绊倒了类似的问题,检查是否集群已启用 - 它可以节省你的头痛周。



Answer 2:

我有同样的问题,用这种方法修复它

http://blogs.dirteam.com/blogs/tomek/archive/2007/08/09/system-directoryservices-and-connection-pooling.aspx



Answer 3:

我读一些有关使用NETSTAT的检查和检测活动连接的状态。 一个TIME WAIT倍数可能表明端口重定向的问题。 尽管如此,我得到了同样的错误了过去3天。 我问过网络管理员修改我的权限,甚至没有帮助。 在文章中更多的细节讨论这样的: C#.NET应用程序失去连接到Active Directory



文章来源: Why does authenticating against LDAP with DirectoryEntry intermittently throw COMException (0x8007203A): “The server is not operational”?