概述
今天开发一个web site 想直接调用域用户的密码来验证登陆
C#开发,直接引用System.DirectoryServices.DirectoryEntry。
//获取所有域用户
var domain = new System.DirectoryServices.DirectoryEntry("LDAP://domain");
//var searcher = new System.DirectoryServices.DirectorySearcher(domain);
//searcher.Filter = string.Format("(&(sAMAccountName={0})(name={1}))", "loginName*", "yang*");
var result = searcher.FindAll();
//SearchResultCollection result =searcher.FindAll() ;
//foreach (SearchResult item in result)
//{
// DirectoryEntry user = (DirectoryEntry)item.GetDirectoryEntry();
// Console.WriteLine(user.Properties["name"].Value.ToString() + " " + user.Properties["sAMAccountName"].Value.ToString());
//}
上面这段使用FindAll 函数,直接获取满足条件的所有用户,然后循环显示所有用户信息。
var searcher = new System.DirectoryServices.DirectorySearcher(domain);
searcher.Filter = string.Format("(&(sAMAccountName={0})(name={1}))", "loginName*", "yang*");
var result = searcher.FindOne();
DirectoryEntry user = result.GetDirectoryEntry();
Console.WriteLine(user.Properties["name"].Value.ToString() + " " + user.Properties["sAMAccountName"].Value.ToString());
foreach (PropertyValueCollection item in user.Properties)
{
Console.WriteLine(item.PropertyName + ":" + item.Value.ToString());
}
user.InvokeSet("SetPassword", "password");
user.CommitChanges();
上面这段用FindOne只查询一个用户,并尝试使用 user.InvokeSet("SetPassword", "password");来修改域用户密码未成功 。
string _Path = "WinNT://" + Environment.MachineName;
DirectoryEntry machine = new DirectoryEntry(_Path);
//获得计算机实例
DirectoryEntry user = machine.Children.Find(userName, "User");
//找得用户
if (user != null)
{
user.Invoke("SetPassword", password); //用户密码
user.CommitChanges();
}
使用 WinNT:可以直接查询本地用户,并使用user.Invoke("SetPassword", password); 来重置本地帐号的密码。
object ret = user.Invoke("ChangePassword", password);可以修改账号的密码。
最后
以上就是友好小丸子为你收集整理的C# System.DirectoryServices.DirectoryEntry 域用户验证的全部内容,希望文章能够帮你解决C# System.DirectoryServices.DirectoryEntry 域用户验证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复