博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net core在Linux下获取AD域信息
阅读量:5891 次
发布时间:2019-06-19

本文共 3376 字,大约阅读时间需要 11 分钟。

.net core在Linux下获取AD域信息

.net Core 2.1.4

.net core现在System.DirectoryServices只支持Windows平台下使用。

参考:

https://github.com/dotnet/standard/pull/444

https://github.com/dotnet/corefx/issues/2089

private Dictionary
AuthenticateActiveDirectory(string username, string password){ Dictionary
dic = new Dictionary
(); DirectoryEntry entry = new DirectoryEntry(_appConfiguration["LDAP:DE"], username, password); try { DirectorySearcher search = new DirectorySearcher(entry); search.Filter = $"(SAMAccountName={username})"; SearchResult result = search.FindOne(); if (result != null) { dic.Add("state","true"); dic.Add("displayname", result.Properties["displayname"]?[0].ToString()); dic.Add("mail",result.Properties["mail"]?[0].ToString()); } } catch (Exception ex) { dic.Add("state", "false"); dic.Add("errMsg",ex.Message); } return dic;}

 

Novell.Directory.Ldap

Novell.Directory.Ldap支持.net core2 Linux环境。

public Dictionary
LdapAuthenticate(string username, string password){ Dictionary
dic = new Dictionary
(); var ldapHost = _appConfiguration["LDAP:Host"]; var ldapPort = _appConfiguration.GetValue
("LDAP:Port"); var mailSuffix = _appConfiguration["LDAP:MailSuffix"]; var searchBase = _appConfiguration["LDAP:SearchBase"]; var loginDN = username; var sAMAccountName = username; if (username.Contains(mailSuffix)) sAMAccountName = username.Substring(0, username.IndexOf(mailSuffix)); else loginDN = $"{username}{mailSuffix}"; var searchFilter = $"(sAMAccountName={sAMAccountName})"; var attrs = _appConfiguration["LDAP:Attrs"].Split('|'); try { var conn = new LdapConnection(); conn.Connect(ldapHost, ldapPort); conn.Bind(loginDN, password); var lsc = conn.Search(searchBase, LdapConnection.SCOPE_SUB, searchFilter, attrs, false); while (lsc.hasMore()) { LdapEntry nextEntry = null; try { nextEntry = lsc.next(); } catch (LdapException ex) { Logger.Debug(ex.ToString(), ex); continue; } var attributeSet = nextEntry.getAttributeSet(); var ienum = attributeSet.GetEnumerator(); while (ienum.MoveNext()) { var attribute = (LdapAttribute)ienum.Current; var attributeName = attribute.Name.ToLower(); var attributeVal = attribute.StringValue; if (attrs.Contains(attributeName)) { dic.Add(attributeName, attributeVal); } } dic.Add("state", "true"); } conn.Disconnect(); } catch (Exception ex) { dic.Add("state", "false"); dic.Add("errMsg", ex.Message); Logger.Debug(ex.ToString(), ex); } return dic;}

 

以上配置信息如下:

"LDAP": {    "_comment": "域帐号登录配置",    "DE": "LDAP://xxx.com",    "Host": "xx.xx.xx.xx",    "Port": 389,    "MailSuffix": "@xxx.com",    "Attrs": "displayname|mail|sn",    "SearchBase": "DC=xxx,DC=com",    "UserRole": "User"  },

 

转载于:https://www.cnblogs.com/ddrsql/p/8516226.html

你可能感兴趣的文章
开启mysql远程访问过程中所遇常见问题的解决办法 ...
查看>>
使用 Dataworks 实现 AnalyticDB for PostgreSQL 上的 ETL 作业调度
查看>>
Navicat生成更新数据库结构同步的数据库
查看>>
DNS服务器的配置
查看>>
MySQL数据库常见管理应用(1)
查看>>
windows驱动里面的问题
查看>>
CUDA实践指南(四)
查看>>
table合并单元格colspan和rowspan
查看>>
IPVS基于应用层任意偏移字段HASH值的负载均衡算法
查看>>
Nginx技术深度剖析(2)
查看>>
部署P2P升级的脚本
查看>>
jenkins--ant持续集成测试build文件脚本 测试报告
查看>>
ubuntu下安装libxml2
查看>>
nginx_lua_waf安装测试
查看>>
easyui 只刷新当前页面的数据 datagrid reload 方法
查看>>
58到家完成3亿美金A轮融资 阿里平安等投资
查看>>
Mysql-mmm高可用方案安装及配置
查看>>
【狂人小白】MyBatis.001 学习巴提斯!
查看>>
全面解析C#中参数传递
查看>>
修改注册表防止SYN淹没式攻击
查看>>