当前位置:首页 > Windows程序 > 正文

C#操作Active Directory(AD)详解

2021-03-27 Windows程序

标签:

1. LDAP简介

  LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。

  LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名DN (Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。类型的一个例子就是mail,其值将是一个电子邮件地址。

LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织 (organization)(o=Acme)或组织单元(organizational units) (ou=People)。一个组织单元可能包含诸如所有雇员、大楼内的所有打印机等信息。此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性。例如:inetorgPerson对象类需要支持sn(surname)和cn(common name)属性,但也可以包含可选的如邮件,,电话号码等属性。

2. LDAP简称对应

o– organization(组织-公司)

ou – organization unit(组织单元-部门)

c - countryName(国家)

dc - domainComponent(域名)

sn – suer name(真实名称)

cn - common name(常用名称)

3.常见的目录服务软件

X.500

LDAP

Actrive Directory,Microsoft公司

NIS

4.AD介绍

.Net提供了专用类操作AD,本文详细介绍使用C#操作AD的方法。

一、系统环境

系统环境:Windows Server 2008 R2, VS2010, .Net Framework 4.0

AD Server:LDAP的server IP

基本DN:OU=user,DC=Company,DC=com

用来登录的管理员:Peter

密码:ab#CD%1234

二、程序

1.  引用

.Net操作AD的类在命名空间System.DirectoryServices下,需要将该类引用进来。

2.  连接

要操作AD需首先连接AD,就象要操作数据先要连接数据库一样。

其中ADPath是要查询组织单元的所在的LDAP,其格式为:LDAP:\\ OU=XX部门,OU=XX公司,DC=域名,DC=COM,如果连接到的AD是在服务器上那么格式写成LDAP:\\XX.XX.XX.XX\ OU=XX部门,OU=XX公司,DC=域名,DC=COM(XX.XX.XX.XX为服务器IP);ADAccount和ADPwd为AD用户的账户和密码,如果是管理员则可以进行任何操作,普通只能进行查询操作。

     de.Path = "LDAP://AD服务器地址/OU=CompanyA,DC=contoso,DC=com";      de.Username = @"contoso\管理员账号";     de.Password = "管理员密码";
   
private static string DomainName = "VMEX"; private static string LDAPDomain = "DC=VMEX,DC=local"; private static string ADPath = "LDAP://DC=VMEX,DC=local"; //AD管理员帐号 private static string ADUser = "Administrator"; //AD管理员密码 private static string ADPasssWord = "1234@abcd";

/// <summary> /// 获得DirectoryEntry对象实例,以管理员登陆AD /// </summary> /// <returns></returns> private static DirectoryEntry GetDirectoryObject() { DirectoryEntry entry = null; try { entry = new DirectoryEntry("LDAP://10.10.10.16", "Peter", " ab#CD%1234", AuthenticationTypes.Secure); } catch (Exception ex) { } return entry; }

3.  查询

根据各种条件获取具体的用户。下例为根据公共名称获取对象。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68230.html