NETCore 同步AD域组织和用户
BitAdminCore为没有自主开发框架的小团队,提供快速项目搭建及开发能力。
框架演示:http://bit.bitdao.cn
框架源码:https://github.com/chenyinxin/cookiecutter-bitadmin-core
不解释,直接上代码
//配置以下四个参数,开放389端口。
string domainName = "bitdao.cn";
string domainRoot = "组织单位";
string domainUser = "user";
string domainPass = "password";
public ActionResult Sync()
{
try
{
//连接域
DirectoryEntry domain = new DirectoryEntry();
domain.Path = string.Format("LDAP://{0}", domainName);
domain.Username = domainUser;
domain.Password = domainPass;
domain.AuthenticationType = AuthenticationTypes.Secure;
domain.RefreshCache(); DirectoryEntry entryOU = domain.Children.Find("OU=" + domainRoot);
DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(objectclass=organizationalUnit)"); //查询组织单位
DirectoryEntry root = mySearcher.SearchRoot; //查找根OU if (root.Properties.Contains("ou") && root.Properties.Contains("objectGUID"))
{
string rootOuName = root.Properties["ou"][].ToString();
byte[] bGUID = root.Properties["objectGUID"][] as byte[];
Guid id = new Guid(bGUID); departments.Add(new SysDepartment() { DepartmentId = id, DepartmentCode = id.ToString(), DepartmentName = rootOuName, DepartmentFullName = rootOuName }); SyncSubOU(root, id);
} //入库
foreach (var d in departments)
{
var department = dbContext.SysDepartment.Find(d.DepartmentId);
if (department == null)
dbContext.SysDepartment.Add(d);
else
{
department.DepartmentName = d.DepartmentName;
department.DepartmentFullName = d.DepartmentFullName;
department.ParentId = d.ParentId;
}
dbContext.SaveChanges();
}
foreach (var u in users)
{
var user = dbContext.SysUser.Find(u.UserId);
if (user == null)
{
u.CreateBy = u.UserId;
u.CreateTime = DateTime.Now;
dbContext.SysUser.Add(u);
}
else
{
user.UserCode = u.UserCode;
user.UserName = u.UserName;
user.DepartmentId = u.DepartmentId;
user.Mobile = u.Mobile;
user.Email = u.Email;
user.UpdateBy = u.UserId;
user.UpdateTime = DateTime.Now;
}
dbContext.SaveChanges();
} return Json(new { Code = , Msg = "同步成功!" });
}
catch (Exception ex)
{
LogHelper.SaveLog(ex);
return Json(new { Code = , Msg = "服务器异常,请联系管理员!" });
}
} List<SysUser> users = new List<SysUser>();
List<SysDepartment> departments = new List<SysDepartment>(); private void SyncSubOU(DirectoryEntry entry, Guid parentId)
{
foreach (DirectoryEntry subEntry in entry.Children)
{
string entrySchemaClsName = subEntry.SchemaClassName; string[] arr = subEntry.Name.Split('=');
string categoryStr = arr[];
string nameStr = arr[]; byte[] bGUID = subEntry.Properties["objectGUID"][] as byte[];
Guid id = new Guid(bGUID); switch (entrySchemaClsName)
{
case "organizationalUnit":
departments.Add(new SysDepartment() { DepartmentId = id, ParentId = parentId, DepartmentCode = id.ToString(), DepartmentName = nameStr, DepartmentFullName = nameStr }); SyncSubOU(subEntry, id);
break;
case "user":
users.Add(new SysUser()
{
UserId = id,
UserCode = subEntry.Properties["samaccountName"][].ToString(),
DepartmentId = parentId,
UserName = subEntry.Properties["displayName"][].ToString(),
Email = subEntry.Properties.Contains("mail") ? subEntry.Properties["mail"][].ToString() : "",
Mobile = subEntry.Properties.Contains("telephoneNumber") ? subEntry.Properties["telephoneNumber"][].ToString() : ""
}); break;
}
}
}
NETCore 同步AD域组织和用户的更多相关文章
- NETCore调用AD域验证
一.添加引用 System.DirectoryServices System.DirectoryServices.AccountManagement 二.验证代码 声明域 string domainN ...
- JAVA 通过LDAP获取AD域用户及组织信息
因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...
- SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)
由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...
- SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)
前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...
- java集成微软的ad域,实现单点登录
1.ad域介绍: windos server 2008R2服务器下的ad域,见下图(我是在虚拟机安装到windos server) 2.连接ad域代码:(里面代码自行修改) public Result ...
- java修改AD域用户密码使用SSL连接方式
正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...
- gitlab用户登录与AD域用户集成
---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...
- 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2
创建两台windows_server_2012 创建步骤链接(https://www.cnblogs.com/zhengyan6/p/16338084.html) 注意:所有虚拟机都要在同意网段 配置 ...
- 如何查看/统计当前AD域控制器的活动用户?
最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...
随机推荐
- python socket 详细介绍
Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...
- vim配置vimrc
新建文件,自动加入文件头 修改文件,保存时,自动更新修改时间字段 自动匹配括号,引号等 vimrc文件如下 "======================================== ...
- PyQt5系列教程(一)Mac OS X下搭建Python3.5.1+PyQt5开发环境
软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.1 前言 Qt是一个开源的跨平台的GUI框架,为很多计算机语言提供了应用程序开发接口 ...
- go 算法
题目: 请实现一个算法,确定一个字符串的所有字符[是否全都不同].这里我们要求[不允许使用额外的存储结构].给定一个string,请返回一个bool值,true代表所有字符全都不同,false代表存在 ...
- Android开发之百度地图的简单使用
越来越多的App运用到了定位,导航的这些功能,其实实现一个自己的百度地图也是非常的简单,这篇博客将会教你简单的实现一个百度地图.看一下效果图: 第一步:要使用百度地图,必须要有百度地图的Key,要获得 ...
- react-native 组件的导入、导出
一.前言背景: 学习react native的关键在于组件,依靠组件的拼接达到想要的效果,由此可见,组件就像一块块功能各异的零件,最终搭建出我们想要的效果. 今天我们就从组件的导入.导出开始 下面是我 ...
- react-native 生命周期
一.前言 问: 什么是组件的生命周期? 组件的生命周期中都包含哪些方法,各有什么作用? 生命周期的方法都在什么时候调用? 生命周期: 顾名思义,一个主体从出生到死亡的整个过程 学习组件(React的基 ...
- [z]微信平台开发教程
http://blog.csdn.net/lyq8479?viewmode=contents
- numpy中三维数组转变成二维数组
numpy中reshape()函数对三维数组进行转换成二维数组,见下面例子: >>>a=np.reshape(np.arange(18),(3,3,2)) >>> ...
- mongo学习-TTL索引 过期数据
在mongo中我们可以设置文档的过期时间,超过时间,文档会自动删除.(2.x版本中 固定结合也支持,但是到了3.x中 固定集合这个索引不好用) 用法: 1.创建一个db:db.createColle ...