OpenLDAP
快速上手
?? Ben
的項目里面要用到
OpenLDAP,
我的項目里面也要用到
LDAP,
所以這
2
天集中看了一下
LDAP
相關(guān)的內(nèi)容。做了個筆記,也算是為人類知識的積累做點或有或無的貢獻。
?? OpenLDAP
的官方站點是
http://www.openldap.org
。
??????
上面有個
QuickStart,
我將大致按照這個來講解。
一、
安裝
在官方站點上發(fā)布的是
linux/unix
下的
OpenLDAP
源文件,當然也很容易找到
windows
系統(tǒng)下的版本。筆者學習安裝的就是
windows
版本的。
二、
配置
OpenLDAP
有
2
個用戶最關(guān)注的配置文件。
一個是
slapd.conf
,
在他里面定義了最基本的
DN
以及管理員的賬號和密碼。
另一個是
LDIF
的文件。在它里面可以配置所有的用戶和組織。
1、?
我們先來了解
LDAP
的相關(guān)概念。
我們知道
LDAP
的全稱為(
Lightweight Directory Access Protocol
),即輕量級目錄訪問協(xié)議。
Ldap
是怎樣的一個結(jié)構(gòu)呢
?用官方的話說:“
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..
”他是一個樹狀的結(jié)構(gòu)。每一個節(jié)點被稱為一個
Entry
。這些
Entry
有著有趣的含義。
下面是他的
2
個實例。一個反映了
geographic
,一個反映了
organizational
。
?????????????????????????????????????????????????????????? 傳統(tǒng)命名

?????????????????????????????????????????????????????????? 網(wǎng)絡(luò)命名
我們來看看個個節(jié)點的定義方式。
每個
Entry
都有一個自己得一個標示
,我們把他叫
DN(Distinguished Name)
,這個
dn
包含了一個
RDN
(
Relative Distinguished Name
)。在上面的第二個圖例
中,Barbara Jensen的RDN是
uid=babs,他的dn是
uid=babs,ou=People,dc=example, dc=com。
每個節(jié)點都需要一個類別
,
這個類別信息用objectClass來表示。ObjectClass就是該節(jié)點的schema,他定義了該節(jié)點該有和不該有的屬性。默認的objectClass都在schema/core.schema中有定義。如果在你的配置過程中出現(xiàn)了關(guān)于找不到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
定義了數(shù)據(jù)庫,最基本的后綴,管理員的
dn
和密碼,以及數(shù)據(jù)存放路徑。
編輯好這個文件,我們就可以啟動了。
如果你把
ldap
安裝為
windows
服務(wù),你可以像我一樣啟動:
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
讓我們來查看以下我們的設(shè)置是否出現(xiàn)問題:
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
已經(jīng)搭建起來了,我們需要在我們的
java
程序中訪問這個服務(wù)。
Openldap.org
上有沒有講?有講?下面介紹的
JLDAP
就是干這個的。
我們需要看一下“
Java LDAP Overview
”里面的內(nèi)容。內(nèi)容不是很多,但很實用。
要在
java
中訪問
ldap
,我們需要一套
api,
你可以在下面的網(wǎng)站上獲得:
http://developer.novell.com/wiki/index.php/LDAP_Classes_for_Java
在下在的文件里面有許多的例子,在
novell
的網(wǎng)站上也有很多的例子。我就不講了。
Try yourself
。