c# - AD - 使用 DirectoryEntry 搜索时出现 LDAP 错误超时
问题描述
我用这个连接到 AD:
public void ValidateCredentials(string username, string password, out ClaimsIdentity identity)
{
using (DirectoryEntry entry = new DirectoryEntry())
{
entry.RefreshCache();
entry.Username = username;
entry.Password = password;
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.ClientTimeout = TimeSpan.FromMinutes(2);
searcher.ServerTimeLimit = TimeSpan.FromMinutes(2);
searcher.Filter = "(&(&(objectclass=user)(objectcategory=person))" +
"sAMAccountName=" + username + ")";
SearchResult srResult = searcher.FindOne();
identity = new ClaimsIdentity();
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, username));
}
}
这样,如果我输入的用户名和密码错误,它会给我一个错误的用户名或密码错误,如果我输入一个正确的用户名和密码,它允许我登录,但如果我输入一个存在的用户名和错误的密码,它给了我一个超时错误(30秒):
由于超时期限已过,此操作返回。
尝试使用 ClientTimeout 和 ServerTimeLimit 增加超时时间,但没有任何反应。
也尝试这样做:
string filter = "(&(&(objectclass=user)(objectcategory=person))" +
"sAMAccountName=username)";
NetworkCredential credentials = new NetworkCredential(username, password);
LdapDirectoryIdentifier directoryIdentifier =
new LdapDirectoryIdentifier("LDAP://DC=domain,DC=com", 389, false, false);
using (LdapConnection connection =
new LdapConnection(directoryIdentifier, credentials, AuthType.Basic))
{
connection.Timeout = new TimeSpan(0, 0, 90);
connection.SessionOptions.ProtocolVersion = 3;
SearchRequest search =
new SearchRequest(username, filter, System.DirectoryServices.Protocols.SearchScope.Base, "mail");
SearchResponse response = connection.SendRequest(search) as SearchResponse;
foreach (SearchResultEntry entry in response.Entries)
{
Console.WriteLine(entry.Attributes["mail"][0]);
}
}
但是服务器给了我一个我不支持的错误。
我对想法持开放态度。
提前致谢。
问候
编辑:我补充说,如果它有任何用处,我们正在通过一个能够减慢速度的 VPN 来做到这一点。
解决方案
问题是他们给我的LDAP url没有很好的优化,他们给了我一个新的url,问题就解决了
推荐阅读
- java - 由于外部库中的 org.junit.Test 类依赖关系,无法使用 LeakCanary
- javascript - 从 API OpenWeatherMap JavaScript 获取数据
- node.js - 我可以直接在反应应用程序上运行节点功能吗
- javascript - 有没有办法将我用 js 附加到 DOM 的任何内容存储在本地存储中,以便在页面重新加载后检索它?
- c++ - 跟踪参考修改以更新原始类
- html - 为什么我不能在表格上输入文字?
- discord.py - 解禁ID | 我使用了解禁命令,但仍然无法使用 ID 解禁
- javascript - fullcalendar.io 5:addEventSource 不能从外部函数工作
- javascript - 使用 ScrollTop 的聊天框不适用于使用 jQuery 的下一个包装类
- r - 使用 ddply 找不到对象