使用 ApacheDS 和 Acegi 實現存取控制
瞭解了 Acegi 安全系統(Acegi Security System)的 基礎知識 後,我們 將介紹該系統的更加進階的應用。在本文中,Bilal Siddiqui 向您展示了如何 結合使用 Acegi 和一個 LDAP 目錄伺服器,實現靈活的具有高效能的 Java™ 應用程式的安全性。還將瞭解如何編寫存取控制策略並將其儲存在 ApacheDS 中,然後配置 Acegi 使其與目錄伺服器互動,從而實現身分識別驗證和授 權的目的。
這期共分三部分的系列文章介紹了如何使用 Acegi 安全系統保護 Java 企業 應用程式。在 本系列第一篇文章 中,我介紹了 Acegi 並解釋了如何使用安全 過濾器實現一個簡單的基於 URL 的安全系統。在第二篇文章中,我將討論 Acegi 的更加進階的應用,首先我將編寫一個存取控制策略並將其儲存在 ApacheDS 中,ApacheDS 是一個開源的 LDAP 目錄伺服器。我還將展示配置 Acegi 的方法,使它能夠與目錄伺服器互動並實現您的存取控制策略。本文的結 尾提供了一個應用程式範例,它使用 ApacheDS 和 Acegi 實現了一個安全的訪 問控制策略。
實現存取控制策略通常包含兩個步驟:
將有關使用者 和使用者角色的資料存放區在目錄伺服器中。
編寫安全的程式碼,它將定義有權 訪問並使用資料的人員。
Acegi 將減輕代碼編寫的工作,因此在這篇文 章中,我將展示如何將使用者和使用者角色資訊儲存到 ApacheDS 中,然後實現這些 資訊的存取控制策略。在該系列的最後一篇文章中,我將展示如何配置 Acegi, 實現對 Java 類的安全訪問。
LDAP 基礎知識
輕量級目錄訪問協 議(Lightweight Directory Access Protocol,LDAP)可能是最流行的一種定 義資料格式的協議,它針對常見的目錄操作,例如對儲存在目錄伺服器中的資訊 執行的讀取、編輯、搜尋和刪除操作。本節將簡要解釋為什麼目錄伺服器是屬性 檔案儲存體安全資訊的首選,並展示如何在 LDAP 目錄中組織和託管使用者資訊。
為什麼要使用目錄伺服器?
本系列第一部分向您介紹了一種簡單的方法,可以將使用者資訊以屬性檔案的 形式儲存起來(參見 第 1 部分,清單 6)。屬性檔案以文字格式設定儲存使用者名稱、 密碼和使用者角色。對於大多數真實應用程式而言,使用屬性檔案儲存體安全資訊遠 遠不夠。各種各樣的理由表明,目錄伺服器通常都是更好的選擇。其中一個原因 是,真實的公司專屬應用程式程式可以被大量使用者訪問 —— 通常是幾千名使用者,如果應 用程式將其部分功能公開給使用者和供應商時更是如此。頻繁搜尋文字檔中隨意 儲存的資訊,這樣做的效率並不高,但是目錄伺服器對這類搜尋進行了最佳化。
第 1 部分的清單 6 中的屬性檔案示範了另一個原因,該檔案組合了使用者和 角色。在真實的存取控制應用程式中,您通常都需要分別定義和維護使用者和角色 資訊,這樣做可以簡化使用者庫的維護。目錄伺服器為更改或更新使用者資訊提供了 極大的靈活性,例如,反映職位升遷或新聘用人員。
LDAP 目錄設定
如果希望將使用者資訊儲存在一個 LDAP 目錄中,您需要理解一些有關目錄設 置的內容。本文並沒有提供對 LDAP 的完整介紹,而是介紹了一些在嘗試結合使 用 Acegi 和 LDAP 目錄之前需要瞭解的基本概念。
LDAP 目錄以節點樹的形式儲存資訊,如圖 1 所示:
圖 1. LDAP 目錄的樹狀結構
在圖 1 中,根節點的名稱為 org。根節點可以封裝與不同企業有關的資料。 例如,本系列第 1 部分開發的製造業企業被顯示為 org 節點的直接子節點。該 製造業企業具有兩個名為 departments 和 partners 的子節點。
partners 子節點封裝了不同類型的夥伴。圖 1 所示的三個分別為 customers、employees 和 suppliers。注意,這三種類型的夥伴其行為與 企業系統使用者一樣。每一種類型的使用者所扮演的業務角色不同,因此訪問系統的 權利也不同。
類似地,departments 節點包含該製造業企業的不同部門的資料 —— 例如 engineering 和 marketing 位元組點。每個部門節點還包含一組或多組使用者。在 圖 1 中,engineers 組是 engineering 部門的子節點。
假設每個部門的子節點表示一組使用者。因此,部門節點的子節點具有不同的 使用者成員。例如,設計部門的所有工程師都是 engineering 部門內 engineers 組的成員。
最後,注意 圖 1 中 departments 節點的最後一個子節點。specialUser 是 一名使用者,而非一組使用者。在目錄設定中,像 alice 和 bob 之類的使用者一般都 包含在 partners 節點中。我將這個特殊使用者包含在 departments 節點中,以 此證明 Acegi 允許使用者位於 LADP 目錄中任何地點的靈活性。稍後在本文中, 您將瞭解如何配置 Acegi 以應用 specialUser。