想为部门做个小程序,不过又不想做用户管理部分,恰好所有的用户都在域上。例如 sample.com。我想先做个login,输入用户自己的域帐户和密码后,login 可以检查该用户在域上的账户和密码是否存在和正确,然后返回个bool就好,请问该怎么做?简单点的就OK,谢谢各位

解决方案 »

  1.   

    把网站内的一个目录,目录下放一个文件,文件内容可以为空,在配iis的时候,把这个目录设置成需要Windows身份验证,登录时用webrequest请求一下目录下的文件,如果GetResponse() 不报错,则验证通过,否则就是没有该用户,我们现在就是这么做的
      

  2.   

    记得在项目中添加对System.DirectoryServices的引用。
    public bool IsUserValid(string name, string pwd)
            {
                DirectoryEntry objDE =
                    new DirectoryEntry("LDAP://testDomain", name.ToLower(), pwd, AuthenticationTypes.ServerBind);            DirectorySearcher mySearcher = new DirectorySearcher(objDE);
                mySearcher.Filter = ("(objectClass=user)");
                string expected = "cn=" + name.ToLower();
                foreach (SearchResult resEnt in mySearcher.FindAll())
                {
                    if (resEnt.GetDirectoryEntry().Name.ToLower() == expected)
                    {
                        return true;
                    }
                }
                return false;
            }
      

  3.   

    using System;
    using System.DirectoryServices;namespace ConsoleApplication1
    {
        internal class Program
        {
            private static void Main(string[] args)
            {
                string name = "jim green"; // RDN format
                string logonName = @"xxx\jgreen"; //pre windows 2000 format
                Console.WriteLine(IsUserValid(name, "the-password"));
                Console.WriteLine(IsUserValid(logonName, "the-password"));
                Console.ReadLine();
            }        public static bool IsUserValid(string name, string pwd)
            {
                DirectoryEntry rootEntry = new DirectoryEntry("LDAP://xxx.com", name.ToLower(), pwd,AuthenticationTypes.ServerBind);            try
                {
                    // Bind to the native object to force authentication
                    Object nativeObject = rootEntry.NativeObject;
                    return true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    return false;
                }
            }
        }
    }
      

  4.   

    注意name参数
    要么写全称,如: jim  green
    要么写域名+简写(具体规则由域管理员控制):如:xxx\jgreen
      

  5.   

    登录成功了,原来用户名格式要 xxx\name 才行。先谢谢cppfaq