日期:2014-05-18  浏览次数:20523 次

如何用asp.net 访问活动目录
用vs2005 想访问 域里的活动目录

在网上找了些例子 有点看不懂  例如: _path = "LDAP://china.com/DC=china,DC=com";
在例如:
 "LDAP://22.11.21.232:389/OU=ou0000_team,OU=ou0000_unit,OU=ou0000_division,DC=bocadtest,DC=com");
我不明白:LDAP 是什么意思。在DC又是什么意思,OU又是什么意思 

请高手解释一下 
并给个访问 活动目录的小例子 !!
小弟在此跪谢了!!!!!!!!!!!!!!!!!!!!!!!

------解决方案--------------------
冒泡接点分

MSDN里没有相关内容?

LDAP 的英文全称是Lightweight Directory Access Protocol,简称为LDAP。它是基于X.500标准的,但是又比它简单许多,并且可以根据需要定制的一种目录服务协议。与X.500不同, LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在 LDAPman RFC网页中找到。
  
    目录服务的工作模型是客户机/服务器模型。1988年,CCITT组织首先创建了 X.500标准全面描述了这一模型,包括目录服务器的目录结构、命名方法、搜索机制以及用于客户机与服务器通信的协议DAP(Directory Access Protocol)。此标准很快被ISO组织引用,编号为ISO 9594。但是,在实际应用的过程中,X.500存在着不少障碍。由于DAP这种应用层的协议是严格遵照复杂的ISO七层协议模型制定的,对相关层协议环境要求过多,在许多小系统上无法使用,TCP/IP协议体系的普及更使这种协议越来越不适应需要。在这种情况下,DAP的简化版棗LDAP应运而生。早期设计的LDAP服务器不是独立的目录服务器,主要扮演LDAP客户机与X.500服务器间网关的角色,既是LDAP的服务器又是X.500的客户机。如今的LDAP服务器可取代X.500服务器而独立提供服务。
    LDAP服务器的目录组织以“条目”为基本单位,结构类似树形,每一个条目即是树上的一个分枝节点或叶子。一个条目由多个“属性”组成,每个属性又由一个“类型”和一到多个“值”组成。LDAP协议直接基于面向连接的TCP协议实现,定义了LDAP客户机和LDAP服务器间的通信过程和信息格式。LDAP服务器在服务端口(缺省端口号为389)监听,收到客户机的请求后,建立连接,开始会话。活动目录与DNS协议的结合的意义在于使内部网与外部网命名方式保持一致,这样便于整个网络的管理。LDAP协议是用于查询和检索活动目录信息的目录访问协议。由于它是基于工业标准的目录服务协议,使用 LDAP 的程序可以发展成与其他目录服务共享活动目录信息,这些目录服务同样支持LDAP。活动目录信息活 动目录使用LDAP 目录访问协议作为它与其他应用或者目录服务交换信息的手段。LDAP 已经成为 目录服务的标准,它比X.500 DAP 协议更为简单实用一些。Microsoft 已经在Exchange Server 系统中提供了LDAP v2 和LDAP v3 的支持,在WIN2K 的活动目录服 务中将提供更为全面的支持。
  
    值得一提的是LDAP 协议中采用的命名格式, 因为我们需要通过名字信息访问目录对象,所以名字格式对于用户或者应用程序非常重要。活动目录支持大多数的名字格式类型。较为常用的格式有以下两种:
  
    (1) RFC822 命 名 法
  
  这种命名法的标准格式为:object_name@domain_name,形式非常类似于电子邮件地址,比如 Myname@mydomain.com。活动目录为所有的用户提供了这种式的好名字,所以用户可以直接使用该友好名字当作电子邮件地址,也可以用作登录系统时的账户名。
  
    (2) LDAP URL 和X.500 名 字
  
    任何一个支持LDAP 的客户都可以利用LDAP名通过LDAP 协议访问活动目录,LDAP 名不像普通的Internet URL 名字那么直观,但是LDAP 名往往隐藏在 应用系统的内部,最终用户很少直接使用LDAP 名。LDAP 名使用X.500 命名规范,也称为属性化命名法,包括活动目录服务所在的服务器以及对象的属性信息。


------解决方案--------------------
ystem.DirectoryServices.Protocols.dll是.net2.0新增加的一个针对目录服务访问协议处理的组件,其下只有一个System.DirectoryServices.Protocols命名空间。在该命名空间下,主要有LDAP、DSML两种国际标准协议的一系列实现类。通过这些类,完全可以很方便地实现对目录的操作管理,这个实现步骤就有点类似你利用ADO.NET操作数据库一样方便。

 LdapConnection的使用:

创建LDAP连接并进行绑定:

NetworkCredential credential = new NetworkCredential("Administrator", "password");XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

 LdapConnection ldapConnection = new LdapConnection("192.168.0.6");

ldapConnection.Credential = credential;

ldapConnection.Bind();

创建一个请求,使其达到增加一个OU,其名称为MyOU的目的。创建后的MyOU其DN为OU=MyOU,DC=mydomain,DC=local:

string targetDN = "DC=mydomain,DC=local";

// 增加一个名为MyOU的组织单元

string ou = "OU=MyOU," + targetDN;

string objectClass = "organizationalUnit";

AddRequest addRequest = new AddRequest(ou, objectClass);

把请求发送到服务器进行处理:

ldapConnection.SendRequest(addRequest);
执行完SendRequest()后,如果没有出现异常,那么MyOU已经成功增加了。当然,如果你还需要进一步对SendRequest()操作后的应答信息进行处理的话,也可以类似下面这样写,其中将在屏幕上输出“Success“的结果码:

AddResponse addResponse = (AddResponse)ldapConnection.SendRequest(addRequest);

Console.WriteLine(addResponse.ResultCode.ToString());


至此,一个LDAP请求已经处理完毕。上面的完整代码可以点这里进行查看。

C# code
using System;

using System.Net;

using System.DirectoryServices;

using System.DirectoryServices.Protocols;

NetworkCredential credential = new NetworkCredential("Administrator", "password");

LdapConnection ldapConnection = new LdapConnection("192.168.0.6");

ldapConnection.Credential = credential;