我正在尝试使用应用程序模式(ADAM)对AD进行身份验证,但不断收到未知用户名或密码错误。如果我在LDP.exe
中测试登录,那么在简单绑定时它就没有问题。我已经在所有类似的帖子中搜索了同样的问题,但是还没有解决它,有什么建议我应该检查什么?
private bool ValidateActiveDirectoryLogin(string Username, string Password)
{
bool Success = false;
System.DirectoryServices.DirectoryEntry Entry = new System.DirectoryServices.DirectoryEntry("LDAP://localhost:389/OU=Users,O=TestDirectory", Username, Password);
System.DirectoryServices.DirectorySearcher Searcher = new System.DirectoryServices.DirectorySearcher(Entry);
Searcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
try
{
System.DirectoryServices.SearchResult Results = Searcher.FindOne();
Success = (Results != null);
}
catch (Exception ex)
{
Success = false;
throw;
}
return Success;
}
答案 0 :(得分:0)
确定您的应用程序使用哪种上下文。如果您的ASP.NET应用程序池标识是低权限的,则它将没有足够的权限来查询活动目录。如果您不想像使用适当的权限那样创建自定义用户来运行应用程序池,则可以使用LogonUser API在该帐户的安全上下文中进行ValidateActiveDirectoryLogin调用。
最后,如果您使用的是.NET 3.5或更高版本,则应考虑使用System.DirectoryServices.AccountManagement。
您可以使用
之类的代码bool validCreds = false;
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
validCreds = context.ValidateCredentials( username, password );
}