很多人发布了这个但却无法得到任何工作。我试图在Asp.net表单上获取用户的用户名和密码(用户用来登录域中计算机的用户名和密码)。
我正在使用PrincipalContext来验证用户。
虽然我提供了有效的用户名和密码,但pc.ValidateCredentials
始终返回false。
这是我第一次通过Active Directory进行用户身份验证,并且不知道从Active Directory成功验证用户还需要什么。
我是否需要在PrincipalContext对象的Container和Name属性中提供信息,因为它看起来是null。
目前,我正在域上的本地计算机上运行此代码。
答案 0 :(得分:4)
你有正确的域名吗?也许它被称为与'DOMAIN'不同,试试这个:
private bool Authenticate(string user, string password)
{
using ( var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName) ) {
return context.ValidateCredentials(user.Trim(), password.Trim());
}
}
答案 1 :(得分:0)
请使用以下功能
private bool AuthenticateAD(string userName, string password, string domain, out string message)
{
message = "";
DirectoryEntry entry = new
DirectoryEntry("LDAP://" + domain, userName, password);
try
{
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(SAMAccountName=" + userName + ")";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
if (null == result)
{
return false;
}
}
catch (Exception ex)
{
message = ex.Message;
return false;
//throw new Exception("Error authenticating user. " + ex.Message);
}
return true;
}