1、LDAP概述
1.1LDAP简介
LDAP的英文全称是Lightweight Directory Access Protocol,简称为LDAP。
LDAP是目录服务(DAP)在TCP/IP上的实现。它是对X500的目录协议的移植,但是简化了实现方法,所以称为轻量级的目录服务。
LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。
LDAP是一个存储静态相关信息的服务,适合“一次记录多次读取”。LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。
在LDAP中,目录是按照树型结构组织的,目录由条目(Entry)组成,条目由属性集合组成,每个属性说明对象的一个特征。每个属性有一个类型和一个或多个值。属性类型说明包含在此属性中的信息的类型,而值包含实际的数据。条目相当于关系数据库中表的记录;条目是具有区别名DN(Distinguished Name)的属性(Attribute)集合,DN相当于关系数据库表中的关键字(Primary Key);属性由类型(Type)和多个值(Values)组成,相当于关系数据库中的域(Field)由域名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率使用基于索引的文件数据库,而不是关系数据库。
1.2 组织数据
LDAP采用目录的方式来组织数据。目录的典型应用是UNIX,在UNIX的文件系统中,最顶层是根目录(root),在根目录的下面有很多的文件和目录。
但是LDAP目录和UNIX文件系统之间有三点不同:
第一是LDAP模型没有真正的根条目。文件系统有一个根目录,它是所有文件和目录的祖先。在LDAP目录中,根条目是概念性的,不作为一个可以存放数据的条目存在。
第二是目录的每个节点都可以包含数据,任何节点都可能作为一个容器,即LDAP条目允许在他的下面有子节点。文件系统的每个节点或者是文件或者是目录,但不能同时是二者。在文件系统中,只有目录可以有子节点,而且只有文件可以包含数据。LDAP中的条目既可以是数据同时也可以兼任目录的角色。
第三是节点命名方式的不同。LDAP名称与文件系统名称的方向是相反的。文件系统的表示方法是从根目录到深层目录一层一层表示,而LDAP则相反,将叶子节点放在前面逐层目录向上推导,最后写出根目录,下一小节详细介绍。
1.3 表示数据
LDAP中记录的表示方法,首先确认以下几个概念:
dn :Distinguished Name;唯一可区别的名称,记录了一条记录的位置,相当于主键
dc :domain component一条记录所属区域(域名)
ou :Organization Unit;一条记录所属组织(组织机构,部门)
cn/uid:Common Name;可用来区分身份的属性,等同于一条记录的名字/ID
一个完整的dn如下所示,以此查询得到一条完整的记录,然后再根据需要取出其中的指定的属性(Attribute)的值。
dn:cn=cc,ou=imcuser-test-ld,dc=zhjdtest,dc=com
dn是从树的叶子节点逐层向根节点推导出的一条唯一路径,表明了这个数据结构中的唯一一条记录。
1.4 操作数据
1.4.1 查询类操作
查询类操作允许用户搜索目录并取回目录数据,有两个查询操作:查询和比较。
LDAP查询操作用来在目录中搜索条目,并取出单个目录条目。LDAP没有读操作,当需要读取某条目时,必须使用一种特殊格式的查询操作,其中限定了你要取回的条目内容。根据取回的条目内容,查询操作分为三种:一种是单个节点查询,是指查询指定了路径的条目的具体节点,这通常用来在目录中查找一个具体的条目;二是子节点查询,是指查询给出条件的节点的下级的条目;三是子树查询,是指查询从给出的条目为根的整个子树的所有条目。
另一类查询操作是比较操作,它用于检查某条目是否包含某个属性值。如果条目有此值,则比较结果为真;如果没有,则比较结果为假。
1.4.2 更新类操作
LDAP更新类操作包括四种操作:添加、删除、修改和重命名,这四种操作定义了在目录中操作数据的方式。
添加操作创建新的目录条目,它必须携带的两个参数为:要创建的条目的分辨名DN和新条目中包含的属性/属性值对的集合。为了使添加操作成功,必须满足以下四个前提条件:
Ø 新条目的父条目必须已经存在
Ø 不能存在同名(分辨名)的条目
Ø 新条目必须与有效的模式(schema)相一致
Ø 访问控制必须允许执行此操作
删除操作只需指明要删除的条目DN。只能删除目录的叶节点,即不支持删除子树。删除一经执行,无法恢复。为了使删除操作成功,必须满足以下两个前提条件:
Ø 要删除的条目的父条目必须存在
Ø 访问控制必须允许执行此操作
修改操作除指明操作的条目DN外,还包括一个数组。其中每个数组元素是一个修改动作,记录修改的操作类型和操作数据。修改操作功能强大,能完成对条目的属性类型和属性值的修改操作。
重命名,用于为条目重命名。它必须指定要重命名的条目、条目新的RDN和删除原RDN标志(delete-old-RDN)。为了使修改RDN操作成功,必须满足如下前提条件:
Ø 被重命名的条目必须已经存在
Ø 条目的新名称不能已经被其他条目使用
Ø 访问控制必须允许执行此操作
1.4.3 认证和控制类操作
认证和控制类操作包括两个LDAP认证操作——绑定和解绑定,一个控制操作——放弃。
绑定操作:一般常用的是使用简单密码的绑定。使用SSL/TLS绑定更加复杂,一般需要预先配置和多步操作,目前RFC没有对此作出规定。
解绑定操作:用于中断持续进行的LDAP操作,关闭连接。
放弃操作用于中断正在进行的操作。
1.5 Schema
目录的模式(schema)是一组规则,用来确定目录能存储什么和服务器和客户端在进行目录操作时如何对待数据。schema被LDAP各方(服务器、客户端、应用程序)用来作为数据交换的“标准”,以保证对数据理解的正确性,从而保证了LDAP协议的开放性。
schema也被用作目录中存储的数据的长度、范围和格式的强制约束。
最后,schema也有利于目录中数据的规整和对访问者权限的控制。
构成schema的元素有属性类型(attribute types)、对象类(object classes)、语法(syntaxes)、匹配规则(matching rules)、目录信息树内容规则(DIT content rules)、目录信息树结构规则(DIT strctural rules)和命名形式(name forms)。
1.5.1 属性类型(attribute types)
属性类型控制属性格式,包括属性的语法、匹配规则、是否可以多值、修改权限和用法等。属性类型可直接由0或多个属性类型继承而来,形成属性类型的层次关系树。
1.5.2 对象类(object classes)
对象类是“共享某些特性的对象的识别家族”,即对象的模板。对象类通过定义条目中所含的属性来定义目录中的条目类型。
在LDAP目录数据库中,所有的条目都必须定义objectClass这个属性。每个条目(LDAP Entry)都要定义自己的Object Classes。Object Class可以看作是LDAP Entry的模板,它定义了条目的属性集,包括必有属性(requited attribute)和可选属性(option attribute)。这里要着重指出的是,在LDAP的Entry中是不能像关系数据库的表那样随意添加属性字段的,一个Entry的属性是由它所继承的所有Object Classes的属性集合决定的,此外可以包括LDAP中规定的“操作属性”(操作属性是一种独立于Object Class而存在的属性,它可以赋给目录中的任意条目)。如果你想添加的属性不在Object Classes定义属性的范畴,也不是LDAP规定的操作属性,那么是不能直接绑定(在LDAP中,给Entry赋予属性的过程称为绑定)到条目上的,你必须自定义一个含有你需要的属性的Object Class,而后将此类型赋给条目。
1.5.3 语法(syntaxes)
语法(syntaxes) 规定了如何用具体的语言和格式来操作目录中的条目数据。
1.5.4 匹配规则(matching rules)
为服务器在搜索操作过程中如何比较字符串提供准则。在国际搜索中,匹配规则告知服务器所用的对照顺序及运算符。
用途:
Ø server执行查询或比较操作时比较属性值
Ø server修改条目时确定要添加或删除的属性值
Ø server在比较DN和条目名称时使用
其他几个元素在LDAPv3中没有提到,在这里就不做介绍了。
1.6 安全特性
LDAP的认证分为:无认证、基本认证、SSL/TLS三种,简单介绍一下。
无认证(匿名) 是最简单的一种方法,这种方法只在没有数据安全问题并且不涉及访问控制权限的时候才能使用。例如,当你的目录是任何人都可以浏览的地址簿时,就是这种情况。当你调用API的绑定操作时分辨名(DN)和密码保留为空,目录会假定是无认证,LDAP服务器会自动假定一个匿名用户会话并且服务相应的访问控制权限。
基本认证(简单密码) 当LDAP客户进程和服务进程之间建立连接时,会协商安全机制,这是在LDAP应用程序接口(API)中指定的方法。除了根本不使用认证之外,最简单的LDAP安全机制是基本认证。
当使用LDAP的基本安全认证时,客户进程通过网络向服务进程发送一个分辨名(DN)和口令来标识自己。服务进程检查客户进程发送的分辨名(DN)和密码是否与目录中存储的分辨名(DN)和密码相匹配,如果匹配则认为通过了认证。
SSL/TLS 安全套接层协议的意图是提供认证和数据的安全性,它封装了TCP/IP,以便于每个TCP/IP应用都能够使用它保证通讯的安全。
FROM:http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Seven/Home/Catalog/201309/797632_97665_0.htm
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109838.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...