LDAP 的目錄服務,不僅可以幫助我們管理階層結構的組織或資源,對很多傳公司來說也是非常常用的驗證技術,這篇對 LDAP 做一些簡單介紹。

LDAP (Lightweight Directory Access Protocol) 是一種輕量的目綠服務協定,像是通訊錄一樣記錄人員資訊,可以拿來做帳號整合、驗證,LDAP 目錄服務通常有層級結構,像是公司組織階層。

資料結構

LDAP generic schema

LDAP 資料結構的三層概念是:SchemaObject ClassAttribute Type,上圖就算是一組 Schema,分別簡述如下:

  • Schema
    • Object Class 的集合,透過集合相同性質的類別,描述現實中的個體的資訊
  • Object Class
    • Attribute Type 的集合,每種 Object Class 會定義有哪些必要、可選的 Attribute Type
    • Object Class 具有繼承的關係
  • Attribute Type
    • 描述資料的內容
    • 已鍵值(Key-Value)的方式表示

使用上述的資料結構來組成 LDAP 的樹狀結構,在 LDAP 中稱呼樹的節點為 Entry,一個 Entry 只能使用一種 Object Class 來表達,而葉子就是 Attribute Type 了,下面這張圖表達了 LDAP 目錄樹的關聯階層。

Directory Infomation Tree

LDAP 的 Attribute Type 很多,可以參考這張列表

常見的項目這裡筆記一下:

屬性名稱 全名 說明
CN Common Name 用戶名稱、單位名稱
DN Distinguished Name 識別名稱,絕對位置
OU Organizational Unit Name 組織單位名稱
DC Domain Componet 網域元件

基本查詢語法

對 LDAP 伺服器,我們可以使用 LDAP 陳述式來寫查詢語法,藉此找到我們想要尋找的資源,以下做一點簡單介紹:

  • = (等於)
    • 例如要尋找名字為 John 的所有物件,可使用:(givenName=John) 這會傳回所有名字為 John 的物件
    • 包括括弧是要強調 LDAP 陳述式的開始和結束
  • & (邏輯 AND)
    • 當您有一個以上的條件,或希望序列中的所有條件皆為 True 時可使用此語法
    • 例如要尋找所有名字為 John 且住在達拉斯的人,可使用:(&(givenName=John)(l=Dallas))
    • 請注意每個引數都位於自己的一組括弧內
    • 整個 LDAP 陳述式必須封裝在主要的括弧組中
  • ! (邏輯 NOT)
    • 排除具有特定屬性的物件
    • 例如要尋找名字為 John 以外的所有物件,可使用:(!givenName=John)
    • ! 運算子是直接放在引數的前面,和引數括弧組的裡面
  • * (萬用字元)
    • 使用萬用字元來代表任何東西的值
    • 例如要尋找標題具有值的所有物件,可使用:(title=*)
    • 或是例如要尋找名字以 Jo 開頭,可使用:(givenName=Jo*) 來尋找這些物件

參考資料:


Poy Chang

Trial and Error