分享

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

 行走在理想边缘 2020-03-20

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多