如果有人有类似的故事,请发表在下面的详细信息!
我要建一个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。
如果任何人有这些问题,请后下,也许最终我们会发现一个模式与工作或有足够数量的例子来说服微软解决这一问题。