Java LDAP介绍

  • 格式:doc
  • 大小:146.00 KB
  • 文档页数:9

1 Java:LDAP

(1) 什么是LDAP

LDAP, Lightweight Directory Access Protocol, 轻量级目录访问协议,是X.500协议的简化版本。LDAP的规范为RFC 2251(ftp:///in-notes/rfc2251.txt),"The Lightweight

Directory Access Protocol (v3)"。Microfost的Active Directory,Lotus的Domino Directory、IBM的WebSphere都是LDAP的实现,LDAP的开源实现是OpenLDAP。

LDAP由以下几部分组成:

LDAP协议,一个标准的、可扩展的Internet目录访问协议;

使用目录的四种模型:信息模型,信息如何存储;命名模型,如何安排和引用目录数据;功能模型,如何操作数据;安全模型,如何进行访问控制;

LDIF,LDAP Data Interchange Format,标准的交换目录数据的文本格式;

LDAP服务软件;

和LDAP服务软件捆绑在一起的命令行工具和基于LDAP的应用程序;

LDAP编程API,用于开发LDAP客户应用程序。

(2) LDAP协议

客户端发起一个请求消息,请求LDAP服务器的某条目录信息,该请求包含唯一的消息ID,如下图。

服务器收到该请求后,返回客户需要的信息,然后在一条独立的消息中返回结果代码。客户端也可以在一条消息中请求多条目录信息,服务器依次返回这些目录条目,并在最后一条消息中返回结果代码,如下图。 2

客户端还可以同时发出多条请求消息,服务器响应这些请求,响应中包含请求消息ID,如下图。

$False$

LDAP协议的操作分为三大类:

查询操作:search, compare

更新操作:add, delete, modify, modify DN(rename)

认证和访问控制:bind, unbind, abandon

下图是一个典型的LDAP协议操作过程。

I. 客户端向LDAP服务器打开TCP连接,提交一个bind操作,该操作包含客户用来炎症的目录条目,以及验证凭据(通常为口令或者证书); 3 II. 服务器验证成功后返回成功结果给客户;

III. 客户端发起search请求;

IV - V. 服务器处理请求,返回两条结果;

VI. 服务器发送结果代码;

VII. 客户端发起一个unbind请求

VIII. 服务器关闭连接

BER,Basic Encoding Rules,与系统无关的紧凑性数据编码规则,用于编码整数、字符串等数据类型,SNMP采用了这种数据编码规则。LBER,Lightweight BER,LDAP使用的一种简化的BER编码规则。可见,LDAP在网络上传输的数据是非文本的,这和HTTP协议及SMTP协议有所不同。

(3) LDAP命名模型

LDAP有两种命名方式:传统的命名方式和基于Internet的命令方式,下图展示了这两种方式。

4 传统的命令方式

Internet命名方式

在命令模型中,有两个重要的概念:

DN,Distinguished name,节点引用的唯一名称,比如uid=babs,ou=People,dc=example,dc=com。

RDN,Relative Distinguished Name ,相对的节点名称,比如uid=babs。

(4) LDAP信息模型

LDAP存储信息的基本单位是Entry,一个节点为一个Entry;

每个Entry有一套Attributes;

每个Attribute有Type和一个或者多个Values;

Type有语法规则(哪些值才能赋给这种类型的属性)和匹配规则;

匹配规则由比较规则和排序规则组成,比如caseIgnoreMatch和integerMatch;

Entry的属性是由Schema来定义的。

(5) LDAP功能模型

5 这里只介绍搜索,其他部分参考后文。在LDAP的搜索中,共有8个选项:

Base Object,搜索的起始根路径;

Search Scope,分三类:base,只检索Base Object; onelevel,检索Base Object下面的第一层目录;sub,检索从Base Object开始的所有下层目录;

Dereferencing选项,是否解除别名节点的引用;

Size Limit,返回的Entries的数目,0为不限制;

Time Limit,0为不限制;

Attribute Only参数,true指示只返回属性类型,否则类型和值都返回;

Search Filter,搜索过滤条件;

要求搜索返回的属性列表,默认为都返回。

(6) LDAP安全模型

Bind操作把DN和用户口令传给LDAP服务器进行认证,LDAP服务器检查DN对应的userPassword属性是否和用户提供的口令一致, 这种认证可用TLS(LDAPv3)保护,也可选用SASL认证。Unbind操作断开和LDAP服务的连接。Abandon操作把Message ID发给LDAP服务器,丢弃已经初始化的LDAP操作。

(7) LDIF文件格式

LDIF按作用可分为两大类:添加数据类和更新数据类。以下为一个典型的添加数据类的格式:

dn: dc=example,dc=com

objectclass: dcObject

objectclass: organization

o: example

dc: example

dn: cn=Manager,dc=example,dc=com

objectclass: organizationalRole

cn: Manager

dn: ou=People,dc=example,dc=com

objectclass: top

objectclass: organizationalUnit 6 ou: People

dn: uid=yingyuan,ou=People,dc=example,dc=com

objectClass: Top

objectClass: Person

objectClass: OrganizationalPerson

objectClass: InetOrgPerson

uid: yingyuan

cn: Yingyuan Cheng

sn: Cheng

userPassword: yingyuan

mail: yingyuan@

description: A little little boy living in the big big

world.

jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALDA4MChAODQ4

SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnP

需要注意的地方是,续行的时候第一个字符必须为空格,如果属性值是Base64编码的,必须要有两个冒号。

数据更新有好几种情况,仅仅为数据添加的方式比如:

dn: uid=bjensen, ou=people, dc=example, dc=com

changetype: add

objectclass: top

objectclass: person

数据删除比如:

dn: uid=bjensen, ou=people, dc=example, dc=com

changetype: delete

文章整理:学网 (本站) [1] [2] [3] [4] [5]

数据修改比如: 7 dn: uid=bjensen, ou=people, dc=example, dc=com

changetype: modify

add: telephoneNumber

telephoneNumber: +1 216 555 1212

dn: uid=bjensen, ou=people, dc=example, dc=com

changetype: modify

delete: telephoneNumber

telephoneNumber: +1 216 555 1212

dn: uid=bjensen, ou=people, dc=example, dc=com

changetype: modify

replace: telephoneNumber

telephoneNumber: +1 216 555 1212

telephoneNumber: +1 405 555 1212

dn: uid=bjensen, ou=people, dc=example, dc=com

changetype: modify

add: mail

mail: bjensen@

-

delete: telephoneNumber

telephoneNumber: +1 216 555 1212

-

delete: description

-

后一个例子把集中更新操作放在一个文件里。

此外更新操作还有目录的移动和重命名,比如:

dn: uid=bjensen, ou=People, dc=example, dc=com

changetype: moddn

newsuperior: ou=Terminated Employees, dc=example, dc=com

dn: uid=bjensen, ou=People, dc=example, dc=com

changetype: moddn