zoukankan      html  css  js  c++  java
  • windows 域验证 IIS7.0

        public sealed class UserInfo
            {
                public string GivenName;
                public string FullName;
                public string Email;
            }
     /// <summary>
            /// 活动目录中的搜索路径,也可根据实际情况来修改这个值。
            /// </summary>
            public static string DirectoryPath = "LDAP://" + GetDomainName();      
    
            /// <summary>
            /// 获取与指定HttpContext相关的用户信息  //登录时调用的方法
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            public static UserInfo GetCurrentUserInfo(string userName,string password)
            {
                string loginName = GetUserLoginName(userName);
                if (string.IsNullOrEmpty(loginName))
                    return null;
    
                return GetUserInfoByLoginName(loginName,password);
            }
    
            /// <summary>
            /// 根据指定的HttpContext对象,获取登录名。
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            public static string GetUserLoginName(string userNames)
            {
                //if (context == null)
                //    return null;
    
                //if (context.Request.IsAuthenticated == false)
                //    return null;
    
                // string userName = context.User.Identity.Name;
                string userName = @"JABIL\" + userNames;
                // 此时userName的格式为:UserDomainName\LoginName
                // 我们只需要后面的LoginName就可以了。
    
                string[] array = userName.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
                if (array.Length == 2)
                    return array[1];
    
                return null;
            }
    
    
            /// <summary>
            /// 根据登录名查询活动目录,获取用户信息。
            /// </summary>
            /// <param name="loginName"></param>
            /// <returns></returns>
            public static UserInfo GetUserInfoByLoginName(string loginName,string password)
            {
                if (string.IsNullOrEmpty(loginName))
                    return null;
    
                // 下面的代码将根据登录名查询用户在AD中的信息。
                // 为了提高性能,可以在此处增加一个缓存容器(Dictionary or Hashtable)。
    
                try
                {
                    //string domainAndUsernames = Environment.UserDomainName + "\\" + loginName;  //在IIS7.0中不起作用
                    string domainAndUsername = "JABIL" + "\\" + loginName;
                    DirectoryEntry entry = new DirectoryEntry(DirectoryPath, domainAndUsername, password);
                    DirectorySearcher search = new DirectorySearcher(entry);
                    search.Filter = "(SAMAccountName=" + loginName + ")";
    
                    search.PropertiesToLoad.Add("givenName");
                    search.PropertiesToLoad.Add("cn");
                    search.PropertiesToLoad.Add("mail");
                    // 如果还需要从AD中获取其它的用户信息,请参考ActiveDirectoryDEMO
    
                    SearchResult result = search.FindOne();
    
                    if (result != null)
                    {
                        UserInfo info = new UserInfo();
                        info.GivenName = result.Properties["givenName"][0].ToString();
                        info.FullName = result.Properties["cn"][0].ToString();
                        info.Email = result.Properties["mail"][0].ToString();
                        return info;
                    }
                }
                catch
                {
                    // 如果需要记录异常,请在此处添加代码。
                }
                return null;
            }
    
    
            private static string GetDomainName()  //获取登录名
            {
                // 注意:这段代码需要在Windows XP及较新版本的操作系统中才能正常运行。
                SelectQuery query = new SelectQuery("Win32_ComputerSystem");
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
                {
                    foreach (ManagementObject mo in searcher.Get())
                    {
                        if ((bool)mo["partofdomain"])
                            return mo["domain"].ToString();
                    }
                }
                return null;
            }
    
    
        }
    }

    备注  Environment.UserDomainName  在VS可以起租用的,在IIS7.0中不起作用

    人生,因静而从容,因从容而优雅
  • 相关阅读:
    AWS EC2服务器的HTTPS负载均衡器配置过程
    大数据技术Hadoop笔试题
    网上找的hadoop面试题目及答案
    360全景图three.js
    360全景图three.js与Photo-Sphere-Viewer-master 3D全景浏览开发
    @font-face 字体
    scss语法
    6.事件
    5.回调函数
    4.querystring属性
  • 原文地址:https://www.cnblogs.com/WangYunyun/p/3291608.html
Copyright © 2011-2022 走看看