.NET Core3.1 调用AD域验证

一、添加引用

  右击项目—— 管理NuGet程序包——分别搜索System.DirectoryServices、System.DirectoryServices.AccountManagement,安装

二、验证

        [HttpPost]
        [EnableCors("userLogin")]
        public Comm.ReturnModelByName checkLogin([FromBody] UserInfo user)
        {
            var ret = new Comm.ReturnModelByName();
            ret.EnName = "";
            string domainName = "10.10.10.1";
            PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName, user.UserName, user.Password);
            try
            {
                if(context.ValidateCredentials(user.UserName, user.Password))
                {
                    Dictionary<string, string> keyValuePairs = new Dictionary<string, string>
                {
                    { "userName", user.UserName }
                };
                    ret.Code = 200;
                    ret.Msg = "登录成功";
                    //获取中文姓名
                    string sql = "select cnname from Employee where code = '" + user.UserName + "'";
                    DataTable dt = SQLHelper.ExecuteDataTable(sql);
                    if(dt != null && dt.Rows.Count > 0)
                    {
                        ret.EnName = dt.Rows[0]["cnname"].ToString();
                    }
                    ret.TnToken = tokenHelper.CreateToken(keyValuePairs);
                }
                else
                {
                    ret.Code = 500;
                    ret.Msg = "用户名或者密码错误" ;
                }
               
            }
            catch (Exception ex)
            {
                ret.Code = 500;
                ret.Msg = "登录失败:" + ex.Message;
            }
            return ret;
        }

        public class UserInfo
        {
            /// <summary>
            /// 用户名
            /// </summary>
            public string UserName { get; set; }
            /// <summary>
            /// 密码
            /// </summary>
            public string Password { get; set; }
        }

 

 public class ReturnModelByName
        {
            /// <summary>
            /// 返回码
            /// </summary>
            public int Code { get; set; }
            /// <summary>
            /// 消息
            /// </summary>
            public string Msg { get; set; }
            /// <summary>
            /// 数据
            /// </summary>
            public object Data { get; set; }
            /// <summary>
            /// Token信息
            /// </summary>
            public TnToken TnToken { get; set; }

            public string EnName { get; set; }
        }

  

三、开放端口,如果无法调用,需要防火墙开放389端口

posted @ 2022-12-21 09:52  小严不言慢  阅读(372)  评论(0)    收藏  举报