OpenLDAP快速上手
OpenLDAP 快速上手
Ben 的项目里面要用到 OpenLDAP, 我的项目里面也要用到 LDAP, 所以这 2 天集中看了一下 LDAP 相关的内容。做了个笔记,也算是为人类知识的积累做点或有或无的贡献。
OpenLDAP 的官方站点是 http://www.openldap.org 。
上面有个 QuickStart, 我将大致按照这个来讲解。
一、 安装
在官方站点上发布的是 linux/unix 下的 OpenLDAP 源文件,当然也很容易找到 windows 系统下的版本。笔者学习安装的就是 windows 版本的。
二、 配置
OpenLDAP 有 2 个用户最关注的配置文件。
一个是 slapd.conf , 在他里面定义了最基本的 DN 以及管理员的账号和密码。
另一个是 LDIF 的文件。在它里面可以配置所有的用户和组织。
1、 我们先来了解 LDAP 的相关概念。
我们知道 LDAP 的全称为( Lightweight Directory Access Protocol ),即轻量级目录访问协议。
Ldap 是怎样的一个结构呢 ?用官方的话说:“ In LDAP, directory entries are arranged in a hierarchical tree-like structure. Traditionally, this structure reflected the geographic and/or organizational boundaries. Entries representing countries appear at the top of the tree. Below them are entries representing states and national organizations. Below them might be entries representing organizational units, people, printers, documents, or just about anything else you can think of.. ”他是一个树状的结构。每一个节点被称为一个 Entry 。这些 Entry 有着有趣的含义。
下面是他的 2 个实例。一个反映了 geographic ,一个反映了 organizational 。
传统命名
网络命名
我们来看看个个节点的定义方式。
每个 Entry 都有一个自己得一个标示 ,我们把他叫 DN(Distinguished Name) ,这个 dn 包含了一个 RDN ( Relative Distinguished Name )。在上面的第二个图例 中,Barbara Jensen的RDN是 uid=babs,他的dn是 uid=babs,ou=People,dc=example, dc=com。
每个节点都需要一个类别 , 这个类别信息用objectClass来表示。ObjectClass就是该节点的schema,他定义了该节点该有和不该有的属性。默认的objectClass都在schema/core.schema中有定义。如果在你的配置过程中出现了关于找不到objectClass的问题,您不妨参看一下这里面有没有你用到的objectClass . 在schema文件夹下还有其他一些schema文件,你也可以定义自己的schema.想要加载其他的schema,你可以在slapd.conf文件中用include加入.如:include ./schema/core.schema. 为了方便识别,其实我们在DN里面用的都是objectClass的简写形式。如:ou代表organizationUnit,c代表country,st代表state,dc代表??等。
2、 来看看 slapd.conf 这个文件
这个文件的主要信息是如下几行:
database bdb
suffix "dc=<MY-DOMAIN>,dc=<COM>"
rootdn "cn=Manager,dc=<MY-DOMAIN>,dc=<COM>"
rootpw secret
directory /usr/local/var/openldap-data
定义了数据库,最基本的后缀,管理员的 dn 和密码,以及数据存放路径。
编辑好这个文件,我们就可以启动了。
如果你把 ldap 安装为 windows 服务,你可以像我一样启动:
net start OpenLDAP-slapd
3、 我们主要操作的就是这个 LDIF 文件
我们需要在这个文件里面加入所需要的 dn.
注意,因为我们在 slapd.conf 中定义了一个 base dn 和一个管理员 dn ,所以我们需要首先把这 2 个 dn 加进来。
dn: dc=<MY-DOMAIN>,dc=<COM>
objectclass: dcObject
objectclass: organization
o: <MY ORGANIZATION>
dc: <MY-DOMAIN>
dn: cn=Manager,dc=<MY-DOMAIN>,dc=<COM>
objectclass: organizationalRole
cn: Manager
保存为 ldif 后缀的文件。然后我们用命令把这些信息加到 ldap 中去:
ldapadd -x -D "cn=Manager,dc=<MY-DOMAIN>,dc=<COM>" -W -f example.ldif
让我们来查看以下我们的设置是否出现问题:
ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'
上面的是 linux/unix 下的命令, windows 下我们需要做点更改:
ldapsearch -x -b dc=example,dc=com (objectclass=*)
对,就是去掉引号。
为了察看方便,笔者建议使用 GUI 工具来查看,比如笔者使用的 Softerra LDAP Browser 2.6 。
三、 和 java 集成
我们的 ldap Server 已经搭建起来了,我们需要在我们的 java 程序中访问这个服务。
Openldap.org 上有没有讲?有讲?下面介绍的 JLDAP 就是干这个的。
我们需要看一下“ Java LDAP Overview ”里面的内容。内容不是很多,但很实用。
要在 java 中访问 ldap ,我们需要一套 api, 你可以在下面的网站上获得:
http://developer.novell.com/wiki/index.php/LDAP_Classes_for_Java
在下在的文件里面有许多的例子,在 novell 的网站上也有很多的例子。我就不讲了。 Try yourself 。