asp.net 下利用DirectoryEntry验证用户及获取域控制器下的用户结构信息
2016-10-24 08:57
671 查看
在企业的众多应用软件中,每个用户对每个软件都需要记住登录的帐号和密码。时间久了,会忘记或搞混。管理人员在用户管理时也需要挨个软件去维护。确实很麻烦。解决的方法是要有统一的用户管理,同一个帐号可以登录多个软件。创建域用户是很好的解决方法。
一、用户的域验证,用户登录软件时,系统先把帐号和密码发送到域服务器进行验证,通过后才能使用软件。
创建 DirectoryEntry对象, 参数:域名(domain) 形如 xxxxx.com,域用户(domainAndUsername)形如 xxxxx.com\user ,域密码(pwd),域用户(user)= 用户登录帐号
C#代码:
二、列举域控制器下的所有用户及组织
本例列举某公司下的组织及用户(组织结构:公司->部门->用户),运行软件的电脑须加入域才能读取域用户信息,如果是web,则发布的服务器也须加入域中。
三、把返回的用户信息以树形方式显示在html 上
一、用户的域验证,用户登录软件时,系统先把帐号和密码发送到域服务器进行验证,通过后才能使用软件。
创建 DirectoryEntry对象, 参数:域名(domain) 形如 xxxxx.com,域用户(domainAndUsername)形如 xxxxx.com\user ,域密码(pwd),域用户(user)= 用户登录帐号
C#代码:
DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", domain), domainAndUsername, pwd); string r = "ok"; try { DirectorySearcher search = new DirectorySearcher(entry); //创建DirectoryEntry对象的搜索对象 search.Filter = "(SAMAccountName=" +user + ")"; //过滤条件为登录帐号=user SearchResult result = search.FindOne(); //查找第一个 if (null == result) //没找到 { r = "cancel"; } } catch (Exception ex) { r = ex.Message; } return r;
二、列举域控制器下的所有用户及组织
本例列举某公司下的组织及用户(组织结构:公司->部门->用户),运行软件的电脑须加入域才能读取域用户信息,如果是web,则发布的服务器也须加入域中。
//domain 域名称 user 域上的用户, pwd 域上的用户密码,root 公司名称 ou=root 表示该公司下的组织及用户 StringBuilder sb = new StringBuilder(); try { DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}/OU={1},DC={2},DC={3}", domain, root, domain.Split('.')[0], domain.Split('.')[1]), domain + @"\" + user, pwd); DirectorySearcher mySearcher = new DirectorySearcher(entry); mySearcher.Filter = ("(objectClass=organizationalUnit)"); // 查找条件是entry 下的部门 sb.Append("[{id:'0',pid:null,text:'" + root + "',expand:true}"); int i = 1; foreach (SearchResult resEnt in mySearcher.FindAll()) //遍历所有部门 { string _a = resEnt.GetDirectoryEntry().Name.Split('=')[1]; if (_a != root) { sb.Append(",{id:'" + i.ToString() + "',pid:'0',text:'" + _a + "'}"); DirectorySearcher m1 = new DirectorySearcher(resEnt.GetDirectoryEntry()); //查找用户对象 m1.Filter = ("(objectClass=user)"); //查找条件是所有用户 foreach (SearchResult r1 in m1.FindAll()) //遍历该部门下的所有用户 { sb.Append(",{ id:'" + r1.GetDirectoryEntry().Properties["sAMAccountName"][0].ToString() + "',pid:'" + i.ToString() + "',text:'" + r1.GetDirectoryEntry().Properties["Name"][0].ToString() + "'}"); } i++; } } sb.Append("]");
三、把返回的用户信息以树形方式显示在html 上
<div id="user" class="gtreeselect" data-options="{poupuWidth:240,leafNode:true,width:210,onChange:set}" ></div>
$(function () { jgui.post("/Data/getaduser", { domain: "gxdonta.com", user: "admin", pwd: "123456", root: encodeURIComponent("XXXXXX有限公司") }, function (text) { jgui.get('user').setData(jgui.parseJSON(text)); }); });
相关文章推荐
- asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
- 有关ASP.NET如果获取登陆用户信息问题
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
- ASP.Net 获取登陆用户信息方法
- asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
- Asp.net+Jquery实现用户信息异步验证
- asp.net获取session进行简单的用户登录验证。
- asp.net IIS 部署报错/获取不到当前用户信息 配置方法
- ASP.NET MVC控制器里捕获视图的错误验证信息(ErrorMessage)
- Asp.net和Jquery实现用户信息异步验证
- 转:在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
- (转)在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
- [asp.net]利用HttpRequest登录到某个网站,然后获取网站信息
- Asp.net和Jquery实现用户信息异步验证
- Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
- ASP.NET MVC通过OAuth调用Google API获取用户信息
- 在ASP.NET 中实现单用户登录(利用Cache, 将用户信息保存在服务器缓存中)[转]
- (转)asp.net获取访问用户IP地址信息的类
- ASP.NET MVC 学习 --- 第四课(创建,删除,获取,验证登陆用户)
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)