
本教程為了讓大家快速體驗,故不做深入講解,詳細內容請留意后續進階教程
介紹
OpenDJ是一個目錄服務器,它實現了各種輕量級目錄訪問協議和相關標准,包括完全符合LDAPv3,但也支持目錄服務標記語言(DSMLv2)。OpenDJ 用Java編寫,提供多主復制,訪問控制和許多擴展。
OpenDJ最初是OpenDS的一個分支,它是一個LDAP / DSML服務器,起源於2005年,由Neil A. Wilson創建的Sun Microsystems內部項目,后來發展成為由Oracle公司維護的開源項目。繼甲骨文收購Sun之后,OpenDJ是ForgeRock開發的主干。
OpenDJ與Forgerock Directory Service
很多人會有疑惑,Forgerock官網上並沒有OpenDJ,只有Forgerock Directory Service。OpenDJ的前身是Oracle OpenDS,后來負責OpenDS的核心成員離開,去到ForgeRock公司,發布了OpenDJ開源項目,自2016年11月起,ForgeRock關閉了OpenDJ源代碼,將OpenDJ重命名為Forgerock Dirctory Service,並開始在商業許可下分發。
目錄服務
目錄是一個為查詢、瀏覽和搜索而優化的專業分布式數據庫,它呈樹狀結構組織數據,就好象Linux/Unix系統中的文件目錄一樣。目錄數據庫和關系數據庫不同,它有優異的讀性能,但寫性能差,並且沒有事務處理、回滾等復雜功能,不適於存儲修改頻繁的數據。所以目錄天生是用來查詢的,就好象它的名字一樣。
目錄服務是由目錄數據庫和一套訪問協議組成的系統。類似以下的信息適合儲存在目錄中:
- 企業員工信息,如姓名、電話、郵箱等;
- 公用證書和安全密鑰;
- 公司的物理設備信息,如服務器,它的IP地址、存放位置、廠商、購買時間等;
- LDAP是輕量目錄訪問協議(Lightweight Directory Access Protocol)的縮寫,LDAP是從X.500目錄訪問協議的基礎上發展過來的,目前的版本是v3.0。與LDAP一樣提供類似的目錄服務軟件還有ApacheDS、Active Directory、Red Hat Directory Service 、Forgerock Directory Service。
LDAP的特點
- LDAP的結構用樹來表示,而不是用表格。正因為這樣,就不能用SQL語句了
- LDAP提供了靜態數據的快速查詢方式
- Client/server模型,Server 用於存儲數據,Client提供操作目錄信息樹的工具
- 這些工具可以將數據庫的內容以文本格式(LDAP 數據交換格式,LDIF)呈現在您的面前
- LDAP是一種開放Internet標准,LDAP協議是跨平台的Interent協議
- 目錄是一個為查詢、瀏覽和搜索而優化的數據庫,它成樹狀結構組織數據,類似文件目錄一樣
- 目錄數據庫和關系數據庫不同,它有優異的讀性能,但寫性能差,並且沒有事務處理、回滾等復雜功能,不適於存儲修改頻繁的數據,天生適合多讀少寫的場景。
LDAP基本概念
[外鏈圖片轉存失敗(img-njBS53ml-1563724999423)(http://www.evanshare.com/upload/2019/7/條目-cc4047a9abd4436ab1ba0e01ba5decda.png)]
-
目錄樹:在一個目錄服務系統中,整個目錄信息集可以表示為一個目錄信息樹,樹中的每個節點是一個條目。
-
條目:每個條目就是一條記錄,每個條目有自己的唯一可區別的名稱(DN)。
-
對象類:與某個實體類型對應的一組屬性,對象類是可以繼承的,這樣父類的必須屬性也會被繼承下來。
-
屬性:描述條目的某個方面的信息,一個屬性由一個屬性類型和一個或多個屬性值組成,屬性有必須屬性和非必須屬性。


准備工作
- 環境:JDK1.8+
- 操作系統:Centos7(本教程操作系統)
- 內存:1G+
- 存儲空間:10G+
- 下載地址:https://backstage.forgerock.com/downloads/browse/ds/latest(選Directory Services,需要FQ才能下載)
- 了解:LDAP基本知識
- 版本:Forgerock Directory Service6.5
安裝
解壓
輸入如下命令解壓安裝包
unzip DS-eval-6.5.2.zip

解壓后如下所示:

執行安裝腳本
本教程的安裝目錄為/usr/local/tools/opendj,執行setup命令進行安裝
./setup directory-server --rootUserDn "cn=Directory Manager" --rootUserPassword password --monitorUserPassword password --hostname localhost --ldapPort 1389 --httpPort 8080 --adminConnectorPort 4444 --baseDn dc=example,dc=com --sampleData 10000 --acceptLicense

查看安裝狀態
進入opendj/bin,執行status命令
./status \
--bindDn "cn=Directory Manager" \
--bindPassword password \
--hostname localhost \
--port 4444 \
--usePkcs12TrustStore /usr/local/tools/opendj/config/keystore \
--trustStorePasswordFile /usr/local/tools/opendj/config/keystore.pin

驗證
使用LDAP操作目錄
搜索LDAP目錄
這里使用項目自帶的sample數據,假設您知道用戶的全名,Abagail Abadines,並且Abagail的條目位於基本DN dc = example,dc = com之下。 您想查找Abagail的電子郵件和辦公地點
./ldapsearch --hostname localhost --port 1389 --baseDn dc=example,dc=com "(cn=Abagail Abadines)" cn mail street l

修改LDAP目錄條目
想進行修改操作,必須先在LDAP做身份驗證。這里模擬Abagail用戶想修改他的個人描述為Hellow World
./ldapmodify --hostname localhost --port 1389 --bindDn uid=user.6,ou=People,dc=example,dc=com --bindPassword password <<EOF dn: uid=user.6,ou=People,dc=example,dc=com changetype: modify replace: description description: Hello World EOF

新增一個LDAP目錄條目
已經授權的用戶,可以進行修改、新增、刪除操作。這里新增一個用戶ID為newuser的用戶
./ldapmodify --hostname localhost --port 1389 --bindDn "cn=Directory Manager" --bindPassword password <<EOF dn: uid=newuser,ou=People,dc=example,dc=com uid: newuser objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: top cn: Evan Liang sn: User ou: People mail: evanliang@example.com userPassword: changeme EOF

刪除一個LDAP目錄條目
刪除上面創建的用戶ID為newuser的用戶,指定唯一索引dn: uid=user.6,ou=People,dc=example,dc=com
./ldapdelete --hostname localhost --port 1389 --bindDn "cn=Directory Manager" --bindPassword password uid=newuser,ou=People,dc=example,dc=com
[外鏈圖片轉存失敗(img-DBkzMTRV-1563724999433)(http://www.evanshare.com/upload/2019/7/8-dd872a5bf8d341a4ba0ef42da6b69199.png)]
使用Rest API操作目錄
創建資源
在設置時配置HTTP端口時,您啟用了DS服務器以響應HTTP請求。 但是,您必須進一步更改服務器配置以啟用對目錄數據的HTTP訪問。
由於默認的REST到LDAP映射文件是用於處理示例數據的示例,因此無法保證可以使用您的數據。 因此,默認情況下不啟用訪問目錄數據的API。
這里啟動API訪問Sample數據
./dsconfig set-http-endpoint-prop --hostname localhost --port 4444 --bindDN "cn=Directory Manager" --bindPassword password --endpoint-name /api --set enabled:true --usePkcs12TrustStore /usr/local/tools/opendj/config/keystore --trustStorePasswordFile /usr/local/tools/opendj/config/keystore.pin --no-prompt

進行修改操作,需要進行授權,這里授權Abagail (user.6) 用戶去修改目錄數據
./ldapmodify --hostname localhost --port 1389 --bindDn "cn=Directory Manager" --bindPassword password <<EOF dn: dc=example,dc=com changetype: modify add: aci aci: (target="ldap:///dc=example,dc=com") (targetattr = "*") (version 3.0;acl "Abagail can update entries"; allow(all) userdn = "ldap:///uid=user.6,ou=People,dc=example,dc=com";) EOF

使用API去創建一個用戶
curl --request POST --user user.6:password --header "Content-Type: application/json" --data '{ "_id": "newuser", "_schema":"frapi:opendj:rest2ldap:user:1.0", "contactInformation": { "telephoneNumber": "+1 408 555 1212", "emailAddress": "newuser@example.com" }, "name": { "givenName": "New", "familyName": "User" }, "displayName": ["New User"], "manager": { "_id": "user.6", "displayName": "Abagail Abadines" } }' http://localhost:8080/api/users?_prettyPrint=true

讀取資源
通過API去讀取剛才創建的用戶ID為newuser用戶
curl --request GET --user user.6:password --header "Content-Type: application/json" http://localhost:8080/api/users/newuser?_prettyPrint=true

更新資源
更新用戶ID為newuser的用戶信息
curl --request PUT --user user.6:password --header "Content-Type: application/json" --header "If-Match: *" --data '{ "_id": "newuser", "_schema":"frapi:opendj:rest2ldap:user:1.0", "contactInformation": { "telephoneNumber": "+1 234 567 8910", "emailAddress": "updated.user@example.com" }, "name": { "givenName": "Updated", "familyName": "User" }, "displayName": ["Updated User"], "manager": { "_id" : "user.6", "displayName" : "Abagail Abadines" } }' http://localhost:8080/api/users/newuser?_prettyPrint=true

刪除資源
通過指定用戶IDnewuser刪除用戶數據
curl --request DELETE --user user.6:password --header "Content-Type: application/json" http://localhost:8080/api/users/newuser?_prettyPrint=true

參考
官方文檔:
- https://backstage.forgerock.com/docs/ds/6.5/reference/index.html
- https://backstage.forgerock.com/docs/ds/6.5/dev-guide/
- https://backstage.forgerock.com/docs/ds/6.5/install-guide
- https://backstage.forgerock.com/docs/opendj/3.5/server-dev-guide/
- https://backstage.forgerock.com/docs/ds/6.5/getting-started
- https://www.cnblogs.com/wilburxu/p/9174353.html
- https://www.cnblogs.com/yjd_hycf_space/p/7994597.html
