C# System.DirectoryServices.DirectoryEntry 域用户验证

今天开发一个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);可以修改账号的密码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值