使用C#根据LDAP对用户进行身份validation
我正在使用DirectorySearcher在LDAP服务器中搜索用户条目。
DirectoryEntry de = new DirectoryEntry(); de.Path = "LDAP://myserver/OU=People,O=mycompany"; de.AuthenticationType = AuthenticationTypes.None; DirectorySearcher deSearch = new DirectorySearcher(); deSearch.SearchRoot = de; deSearch.Filter = "(uid=" + model.UserName + ")"; SearchResult result = deSearch.FindOne();
我能够在结果变量中得到预期的输出。
但是,如果我尝试通过在目录条目中提供密码来validation同一用户,我总是会遇到以下错误。
“用户名或密码不正确。”
DirectoryEntry entry = new DirectoryEntry("LDAP://myserver/OU=People,O=mycompany", username, password); DirectorySearcher search = new DirectorySearcher( entry, "(uid=" + username + ")", new string[] { "uid" } ); search.SearchScope = System.DirectoryServices.SearchScope.Subtree; SearchResult found = search.FindOne(); ->>>>>this is where I get wrong credential error.
用户名和密码适用于我要validation的用户。
任何人都可以告诉我这里我做错了什么或如何调试这个。
此行中的用户名,密码:
DirectoryEntry("LDAP://myserver/OU=People,O=mycompany", username, password);
应该是具有目录查找权限的帐户。 它可以是一个服务帐户或测试目的尝试与您自己。 这不应该是您尝试进行身份validation的用户/通行证。
如果要进行身份validation,可以使用PrincipalContext使用以下步骤:
using(var context = new PrincipalContext(ContextType.Domain, "mydomain", "mydomain\serviceAcct", "serviceAcctPass")) { //Username and password for authentication. return context.ValidateCredentials(username, password); }
“serviceAcct”=域用户中具有目录查找权限的帐户。 “serviceAcctPass”=该服务帐户的密码。 正如我所说,对于测试,您可以尝试使用自己的用户/传递上下文。
此外,请确保提供的用户名具有“domain \ username”或“username @ domain”格式。
- 以编程方式下载GitHub私有仓库的C#示例
- 未指定authenticationScheme,并且未找到DefaultChallengeScheme Cookies身份validation
- 从ASP.NET Core 1.1 MVC迁移到2.0后,自定义cookie身份validation无法正常工作
- OWIN身份validation,使当前令牌失效并删除cookie
- Cookie身份validation在ASP.NET Core中过早到期
- 错误(407)“需要代理validation”。
- 复制网络共享驱动器上的文件
- 在WCF中,服务器没有访问客户端的公钥,客户端没有访问服务器的公钥 – 仍然是Web方法操作成功。 为什么?
- 将HTTP身份validation与C#WebRequest一起使用