.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端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构