使用Novell.Directory.Ldap.NETStandard在.NET Core中验证AD域账号
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=com
public static int Port = ;//域服务器端口,一般默认就是389
public 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);//这里用户名或密码错误会抛出异常LdapException 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}");//james
Console.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);//这里用户名或密码错误会抛出异常LdapException
// 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();
}
}
}
使用Novell.Directory.Ldap.NETStandard在.NET Core中验证AD域账号的更多相关文章
- novell.directory.ldap获取邮箱活动目录
在windows系统上可以使用下列方法来查找所有的员工邮箱和员工组: StringDictionary ReturnArray = new StringDictionary(); Dictionary ...
- 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)
一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...
- ASP.NET Core-Docs:在 ASP.NET Core 中启用跨域请求(CORS)
ylbtech-ASP.NET Core-Docs:在 ASP.NET Core 中启用跨域请求(CORS) 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. ...
- 在 ASP.NET Core 中启用跨域请求(CORS)
本文介绍如何在 ASP.NET Core 的应用程序中启用 CORS. 浏览器安全可以防止网页向其他域发送请求,而不是为网页提供服务. 此限制称为相同源策略. 同一源策略可防止恶意站点读取另一个站点中 ...
- ASP.NET Core AD 域登录
在选择AD登录时,其实可以直接选择 Windows 授权,不过因为有些网站需要的是LDAP获取信息进行授权,而非直接依赖Web Server自带的Windows 授权功能. 当然如果使用的是Azure ...
- ASP.NET Core AD 域登录 (转载)
在选择AD登录时,其实可以直接选择 Windows 授权,不过因为有些网站需要的是LDAP获取信息进行授权,而非直接依赖Web Server自带的Windows 授权功能. 当然如果使用的是Azure ...
- .net core在Linux下获取AD域信息
.net core在Linux下获取AD域信息 .net Core 2.1.4 .net core现在System.DirectoryServices只支持Windows平台下使用. 参考: http ...
- Ldap实现AD域认证
1.java Ldap基础类 package com.common; import java.io.FileInputStream; import java.io.IOException; impor ...
- AD 域服务简介(一)- 基于 LDAP 的 AD 域服务器搭建及其使用(转)
一.前言 1.1 AD 域服务 什么是目录(directory)呢? 日常生活中使用的电话薄内记录着亲朋好友的姓名.电话与地址等数据,它就是 telephone directory(电话目录):计算机 ...
随机推荐
- 基于react的标准form+table页面的请求流程图
componentDidMount直接走handleSearch而不走loadData,是为了当form有默认初始值的时候也能适用! --------------------2018.2.7新增--- ...
- 火狐hr标签的兼容性问题
想在盒子里加一条白色横线 加了以下代码 页面效果如下<hr style="width:80%;height:1px;border:none;border-top:1px solid # ...
- 利用HTML5和echarts开发大数据展示及大屏炫酷统计系统
想这样的页面统计及展示系统都是通过echarts来发开的及ajax数据处理,echarts主要是案例,在案例上修改即可,填充数据 echarts的demo案例如下: http://echarts.ba ...
- 判断exe是64位还是32位
右击exe属性,查看兼容模式. 如果有windwos vista之前的版本则为32位的,如下图: 如果没有windwos vista之前的版本则为64位的,如下图:
- 更改 Windows VM 的可用性集
以下步骤说明如何使用 Azure PowerShell 来更改 VM 的可用性集. 只能在创建 VM 时将 VM 添加到可用性集. 如果要更改可用性集,必须将虚拟机删除,并重新创建虚拟机. 使用 Po ...
- 转:C# 读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...
- Centos 6.5-yum安装出现错误解决方案
最近在用Centos 6.5 的时候出现了以下情况: 遇到这种问题试试以下方法: 1.检查是否能上网:ping www.baidu.com 如果显示没有连接的话,就说明没网,也就无法使用yum 命令安 ...
- python基础学习3----列表
一.字符格式化输出 占位符 %s s = string 字符串 %d d = digit 整数 %f f = float 浮点数 name = input(&q ...
- MySQL核心之双一原则
所谓的双一就是指: sync_binlog=; innodb_flush_log_at_trx_commit= innodb_flush_log_at_trx_commit和sync_binlog这两 ...
- AfxBeginThread
用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和 ...