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域组织和用户的更多相关文章

  1. NETCore调用AD域验证

    一.添加引用 System.DirectoryServices System.DirectoryServices.AccountManagement 二.验证代码 声明域 string domainN ...

  2. JAVA 通过LDAP获取AD域用户及组织信息

    因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...

  3. SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)

    由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...

  4. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  5. java集成微软的ad域,实现单点登录

    1.ad域介绍: windos server 2008R2服务器下的ad域,见下图(我是在虚拟机安装到windos server) 2.连接ad域代码:(里面代码自行修改) public Result ...

  6. java修改AD域用户密码使用SSL连接方式

    正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...

  7. gitlab用户登录与AD域用户集成

    ---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...

  8. 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2

    创建两台windows_server_2012 创建步骤链接(https://www.cnblogs.com/zhengyan6/p/16338084.html) 注意:所有虚拟机都要在同意网段 配置 ...

  9. 如何查看/统计当前AD域控制器的活动用户?

    最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...

随机推荐

  1. python实现socket上传下载文件-进度条显示

    在python的socket编程中,可以实现上传下载文件,并且在下载的时候,显示进度条,具体的流程如下图所示: 1. 服务器端代码如下: [root@python 519]# cat server.p ...

  2. layui 弹框

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&q ...

  3. 「小程序JAVA实战」小程序的页面重定向(60)

    转自:https://idig8.com/2018/09/24/xiaochengxujavashizhanxiaochengxudeyemianzhongdingxiang59/ 在我们正常的浏览网 ...

  4. node升级更新最近稳定版

    今天,又发现一个超级简单的升级Node.js的方法.一行命令搞定,省去了重新编译安装的过程. node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 首先安装n模块: ...

  5. Mysql,重复字段只取其中一行

    Mysql,重复字段只取其中一行 格式 : select 字段 from [表] where 其他字段 in (select 函数(其他字段) from [表] group by 相同字段) 示例如下 ...

  6. 48. Rotate Image (Array)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  7. JS如何判断浏览器类型,如何模拟浏览器类型(模拟微信浏览器)

    一.前言 在编写前端代码时,为了页面兼容性,我们往往需要考虑不同的浏览器类型 而这就需要在前端代码中进行识别和区分 接下来就来谈谈对浏览器类型的识别 二.正文 (一).查看浏览器类型的核心代码 var ...

  8. 最长无重复字符的子串 · Longest Substring Without Repeating Characters

    [抄题]: 给定一个字符串,请找出其中无重复字符的最长子字符串. 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3. 对于, ...

  9. golang apns升级到http2

    记录一下golang中升级apns,使用http2替换http1.1的详细过程. apns使用http2的好处就不用再说了,网上一搜一堆信息.苹果的apns推送在2015年8月就支持了http2协议, ...

  10. sort_contours_xld算子的几种排序方式研究

    算子sort_contours_xld算子有5种排序方式,即: 'upper_left': The position is determined by the upper left corner of ...