AD、LDAP
AD 與 LDAP 的關係
如果把 企業網路 比喻成一棟辦公大樓:
-
AD (Active Directory) 就是這棟大樓的物業管理系統。它負責門禁(誰能進來)、資產清冊(哪台電腦在哪層樓)以及房間權限(誰能進會議室)。
-
LDAP (Lightweight Directory Access Protocol) 就是管理員手中的通訊協定。無論是用對講機、廣播還是填寫申請表,只要是「跟物業系統溝通」的方式,都遵循 LDAP 這個標準格式。
AD 的邏輯層級:從大到小
AD 採用樹狀結構,理解這四個層級對設定 LDAP 路徑(Distinguished Name, DN)至關重要:
| 層級 | 概念 | 說明 | 範例 (DN 格式) |
|---|---|---|---|
| Forest (森林) | 邊界 | 企業的最頂層。包含所有的 Domain。 | N/A (邏輯概念) |
| Domain (網域) | 權限邊界 | 與 DNS 綁定,是物件存放的實體範圍。 | DC=corp,DC=local |
| OU (組織單位) | 容器/資料夾 | 用來分類 User、Computer。可下達群組原則 (GPO)。 | OU=Engineering,OU=Users |
| Object (物件) | 最小單位 | 具體的 User 或 Group。 | CN=John Doe |
拆解 LDAP 的「座標系統」 (Distinguished Name)
在開發時(如 Java JNDI 或 Spring Security),我們常看到的 CN=User,OU=IT,DC=corp,DC=local 其實就是一個絕對路徑。
為什麼要有 DC=corp,DC=local?
這與 DNS (Domain Name System) 息息相關。AD 依賴 DNS 來定位伺服器(Domain Controller)。
- 格式轉換: LDAP 將網域
corp.local拆解為 Domain Components (DC)。 - 重要性: 這是路徑的「根部」。沒有
DC,LDAP 就不知道要去哪一個網域樹狀圖中搜尋資料。
常用關鍵字速查
- CN (Common Name): 物件名稱(人名、群組名)。
- OU (Organizational Unit): 組織部門。
- DC (Domain Component): 網域組成。
開發實務:伺服器 vs 網域路徑
在程式碼中,這兩者經常被混淆,但它們扮演的角色完全不同:
1. 伺服器地址 (Provider URL)
// 指向「物理位置」,即 Domain Controller 的 IP 或 FQDN
properties.put(Context.PROVIDER_URL, "ldap://192.168.1.100:389");
- 目的: 告訴程式「該連線到哪台主機」。
- 注意: 如果有兩台 DC 做負載平衡,這裡通常會填寫 Domain FQDN (如
ldap://corp.local)。
2. 基本搜尋路徑 (Base DN)
- 目的: 告訴程式「從哪個目錄分支出發」。
- 優化: Base DN 越精確(例如指定到 OU),搜尋速度就越快,且能避免跨網域搜尋的效能損耗。
進階建議:安全與最佳實務
-
LDAPS (LDAP over SSL): 預設的 LDAP (Port 389) 是明文傳輸。在生產環境中,務必使用 Port 636 (LDAPS) 以保護帳號密碼。
-
Service Account: 程式連線 AD 時,應使用一個「僅有讀取權限」的專用帳號,而非 Domain Admin。
-
Global Catalog (Port 3268): 如果你的公司很大,有多個子網域(Multi-domain),搜尋時改用 3268 埠,可以一次搜尋整個森林的資料。