使用Novell.Directory.Ldap.NETStandard在.NET Core中验证AD域账号

news/2024/7/5 3:54:01

Novell.Directory.Ldap.NETStandard是一个在.NET Core中,既支持Windows平台,又支持Linux平台,进行Windows AD域操作的Nuget包。

 

首先我们新建一个.NET Core控制台项目:NetCoreLdap,并下载如下Nuget包:

Novell.Directory.Ldap.NETStandard

 

然后我们新建一个.NET Core类LDAPUtil,用来对域账号进行验证:

using System;
using Novell.Directory.Ldap;namespace NetCoreLdap
{/// <summary>///  LDAP工具类/// </summary>public static class LDAPUtil{public static string Domain = "apac";//域名称public static string Host = "apac.contoso.com";//域服务器地址public static string BaseDC = "DC=apac,DC=contoso,DC=com";//根据上面的域服务器地址,每个点拆分为一个DC,例如上面的apac.contoso.com,拆分后就是DC=apac,DC=contoso,DC=compublic static int Port = 389;//域服务器端口,一般默认就是389public static string DomainAdminUser = "admin";//域管理员账号用户名,如果只是验证登录用户,不对域做修改,可以就是登录用户名public static string DomainAdminPassword = "1qaz!QAZ";//域管理员账号密码,如果只是验证登录用户,不对域做修改,可以就是登录用户的密码/// <summary>/// 验证域用户的账号和密码/// </summary>/// <param name="username">域用户的账号</param>/// <param name="password">域用户的密码</param>/// <returns>true验证成功,false验证失败</returns>public static bool Validate(string username, string password){try{using (var conn = new LdapConnection()){conn.Connect(Host, Port);conn.Bind(Domain + "\\" + DomainAdminUser, DomainAdminPassword);var entities =conn.Search(BaseDC, LdapConnection.ScopeSub,$"sAMAccountName={username}",//注意一个多的空格都不能打,否则查不出来new string[] { "sAMAccountName", "cn", "mail" }, false);string userDn = null;while (entities.HasMore()){var entity = entities.Next();var sAMAccountName = entity.GetAttribute("sAMAccountName")?.StringValue;var cn = entity.GetAttribute("cn")?.StringValue;var mail = entity.GetAttribute("mail")?.StringValue;Console.WriteLine($"User name : {sAMAccountName}");//jamesConsole.WriteLine($"User full name : {cn}");//James, Clark [james]Console.WriteLine($"User mail address : {mail}");//james@contoso.com//If you need to Case insensitive, please modify the below code.if (sAMAccountName != null && sAMAccountName == username){userDn = entity.Dn;break;}}if (string.IsNullOrWhiteSpace(userDn)) return false;conn.Bind(userDn, password);// LdapAttribute passwordAttr = new LdapAttribute("userPassword", password);// var compareResult = conn.Compare(userDn, passwordAttr);
                    conn.Disconnect();return true;}}catch (LdapException ldapEx){string message = ldapEx.Message;return false;}catch (Exception){return false;}}}
}

 

然后在.NET Core控制台项目的Main方法中调用LDAPUtil.Validate方法,来验证一个AD账户:

using System;namespace NetCoreLdap
{class Program{static void Main(string[] args){string username = "james";string password = "2wsx@WSX";var loginFlag = LDAPUtil.Validate(username, password);if(loginFlag){Console.WriteLine("User validate successfully!");}else{Console.WriteLine("User validate unsuccessfully!");}Console.ReadLine();}}
}

 

 

本例源代码

 


http://lihuaxi.xjx100.cn/news/245194.html

相关文章

我,是真是一个培训班出来的程序员

点击上方“搜云库技术团队”&#xff0c;选择“设为星标”回复“1024”或“面试题”获取4T学习资料作者 l HeroMe原作者&#xff1a;HeroMe &#xff0c;文中的"我"均为作者本人。1这个城市的所有人都在忙碌的过生活&#xff0c;他们行色匆匆&#xff0c;车水马龙&am…

无聊的时候,冷死了(六)

阁下长得真是天生励志&#xff01;好久没有听到有人能把牛吹得这么清新脱俗了&#xff01;你出生时就丑的躲起来了&#xff0c;连你父母都不敢见你&#xff0c;你还怕有人举报你&#xff1f;你拉着一头猪逛街&#xff0c;很幸福的样子&#xff0c;我经过满怀同情的说&#xff1…

Nancy in .Net Core学习笔记 - 初识Nancy

原文:Nancy in .Net Core学习笔记 - 初识Nancy前言 去年11月份参加了青岛MVP线下活动&#xff0c;会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下&#xff0c;最近正好有空&#xff0c;就结合.NET Core学习总结了一下。 注&#xff1a; 本文中大部分内容都是对官网文档的…

每个极客都应该知道的Linux技巧

为什么80%的码农都做不了架构师&#xff1f;>>> 是什么区分开普通的Linux用户和超级极客的呢&#xff1f;很简单&#xff1a;用在学习那些使长时工作转变为一瞬间工作的技巧、诀窍、秘诀和技术上的时间。如果你想提 高效率而又不用做这些搜集资料的跑腿活儿&#x…

轻松掌控全链路服务监控:方案概述与对比 | 真的很干!

点击上方“搜云库技术团队”&#xff0c;选择“设为星标”回复“1024”或“面试题”获取4T学习资料0 —问题背景随着微服务架构的流行&#xff0c;服务按照不同的维度进行拆分&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上&#xff0c;这些…

一次心惊肉跳的服务器误删文件的恢复过程

经历了两天不懈努力&#xff0c;终于恢复了一次误操作删除的生产服务器数据。对本次事故过程和解决办法记录在此&#xff0c;警醒自己&#xff0c;也提示别人莫犯此错。也希望遇到问题的朋友能找到一丝灵感解决问题。事故背景安排一个妹子在一台生产服务器上安装Oracle,妹子边研…

网易考拉在服务化改造方面的实践

网易考拉&#xff08;以下简称考拉&#xff09;是网易旗下以跨境业务为主的综合型电商&#xff0c;自2015年1月9日上线公测后&#xff0c;业务保持了高速增长&#xff0c;这背后离不开其技术团队的支撑。微服务化是电商IT架构演化的必然趋势&#xff0c;网易考拉的服务架构演进…

金九银十征服、阿里、京东、字节跳动,的程序员和他们的公众号

学习如逆水行舟&#xff0c;不进则退&#xff1b;今天给大家精心挑选的这几个超级牛逼的公众号&#xff0c;在行业深耕已久&#xff0c;这些号一般是由深耕技术多年的IT老兵、名校超级学霸运营&#xff01;表哥有话讲国内最大的数据从业者分享平台。20W程序员聚集地&#xff01…