LDAP 概論
20:39
LDAP ( Lightweight Directory Access Protocol ) 其實也不是什麼新的名詞, 在大型企業的應用之中, 也使用了很久, 畢竟大型企業的系統開發, 比較少人接觸過, 也無法真的體會, Directory Server 遠比資料庫的使用來得低, 不過, X.500 的觀念卻和大家息息相關, 因為大家在網路上可以相互連結傳送訊息, 而不會到其他錯誤的地方~
目前的 LDAP 大多使用 v2 (
http://www.faqs.org/rfcs/rfc1777.html) 或是 v3 (
http://www.faqs.org/rfcs/rfc2251.html). 多數接觸到的 Directory Server 有
- Microsoft Active Directory
- Novell DS
- SUNONE DS ( 原 iplanet )
- IBM DS
- OpenLDAP
在我們常常使用的 J2EE Application Server 大多都有實作 Authenitcation LoginModule, 讓我們將身分驗證資料放在 Directory Server 來處理, 進而取得 Subject, 可能是 UserPrinciple 或是 RolePrinciple. 這裡的細節可以查閱 JAAS 的討論.
在 LDAP 說明之前, 先簡單介紹幾個名詞
- DIT ( Directory Information Tree )
- DN ( Distinguished Name )
- RDN ( Relative Distinguished Name )
- OID (Object Identifier )
- Schema : attribute type 的集合
- objectClass : 物件類別, 具有繼承的能力,
( to be continue … )
在我們的規劃之中, 一套完整的產品必須結合 ldap 才能夠登上國際舞台, 因為大型企業不會因為你的系統而修改或轉換身分驗證資料給你. 不過, 在國內的應用卻非常千奇百怪, 往往有 Directory Server, 卻發現常常是每天轉檔到資料庫, SI 再由資料庫取得資料做相關驗證. 這麼做, 就失去了要使用 ldap 的原意.
為什麼要使用 LDAP 呢, 因為網路上採用 Directory Services 來處理相關的人員資料, 例如我的 Email 為 xxxx@ softleader.com.tw, 就是指 taiwan (tw) 裡面的 company (com) 裡面的 softleader 公司 中, 有 uid = xxxx 的人存在. 這種樹狀結構的資料, 如果採用 Database 來開發, 速度與效能都不會很好, 因此, 我們會盡量開發 application 結合 directory server 來建立完整的身分驗證與權限管控.
很高興的, Java 提供了 JNDI 去存取 Directory Server, 透過 javax.naming.* , javax.naming.directory.* 我們就可以簡單地與 Directory 溝通, 只要了解 ldap 的基本語法, 就可以很快地開發相關的系統. 另一方面, 隨著 WebServices 的普及, 我們更可以利用 DSML 與現行主要廠商的 Directory Server 溝通, 未來, 使用 LDAP 應該會和 DB 一樣, 如同操作 JDBC 一樣簡單.