.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; }
        }
复制代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 @   小严不言慢  阅读(331)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示