OpenAM簡介:OpenAM是一個開源的訪問管理、授權服務平台。由ForegeRock公司發起。OpenAM前身為OpenSSO,由SUN公司創建,現在屬於Oracle。
本文在OpenAM 13版的Getting started With OpenAM文檔上進行描述和總結。
在這個文檔中你將了解如何使用OpenAM 和 Web策略代理 (policy agent)來管理一個網頁的訪問。
第一章:利用OpenAM對一個網站進行保護
1.1 關於OpenAM
OpenAM 將“控制訪問”(access control)實現聚焦在處理驗證(authentication)和授權(authorization)兩個方面。
“驗證”是對個體身份的鑒別,例如,驗證用戶名、密碼等身份信息。
“授權”既授予通過驗證后的用戶對一些資源(圖片、URL等)的訪問權。
關於驗證
OpenAM中定義了一條"驗證鏈"(authentication chain)來對用戶身份信息進行驗證,“驗證鏈”由單個或多個驗證模塊(authentication module)組成。
這些模塊分別於身份信息倉儲(identity repositories)連接,身份信息倉儲存儲了用戶的信息並提供驗證服務。
身份信息倉儲包含了LDAP目錄,關系型數據庫,RADIUS(Remote Authentification Dial in User Service) , Windows授權,one-time 密碼服務(OTP),和一些其他的訪問管理系統。
“驗證鏈”的意義:將不同的驗證服務連接在一起,為一些敏感資源提供更強的保護。還可以實現當用戶成功登陸后記住用戶的登陸設備、當用戶登陸環境不正常時提供額外的驗證要求等。
本文由於是入門文檔,所以采用了OpenAM中內置默認的身份信息倉儲和驗證鏈。
關於授權
OpenAM對授權信息進行了集中化管理(centralize authorization),這使得訪問策略(access policy)與受保護的資源分離。
與在web應用(受保護的)代碼中嵌入訪問策略不同,OpenAM在web應用部署的web服務器上(httpd,tomcat等)上安裝一個策略代理(policy agent,下文簡稱PA)來執行OpenAM的驗證結果。
OpenAM做出用戶驗證判斷結果(允許或拒絕用戶訪問某資源),交給PA來執行。
接下來,將安裝OpenAM,創建一個策略(policy),安裝一個策略代理(policy agent )及在一台Web服務器上實現對一個頁面的訪問驗證。
1.2 需要安裝的軟件
- JDK(OpenAM是一個Java web 程序)
- Apache HTTP server(本文中訪問控制的web應用部署在http server上)
- Apache Tomcat
- OpenAM 核心包 (OpenAM的主web程序)
- OpenAM Apache Policy Agent (安裝在Apache HTTP server上,對用戶的請求進行解析並執行OpenAM做出的用戶驗證判斷結果)
1.3 安裝過程 (本文僅討論在CentOS下的安裝)
a. 修改 hosts文件
OpenAM 保護Web資源時, 需要你使用完整域名(fully qualified domain names)
這是因為OpenAM 使用cookie來跟蹤單點登錄(Single Sign-On)的會話,根據完整的服務器名和域來識別cookies。
在這里我們通過修改hosts文件在一台服務器上實現兩個不同的訪問域名。
注:本文檔是搭建一個簡單的測試環境,所以OpenAM和web應用被放在一個server上。openam.example.com是OpenAM的域名,而www.example.com是Web應用的域名。
b. 安裝Apache HTTP server
安裝開發工具
OpenAM web 策略登代理需要Apache 1.3以上,這里推薦2.2.9以上的版本
安裝 Apache HTTP server
$ yum install httpd
修改httpd配置文件,使服務器名稱為 www.example.com,將端口改為8000。
啟動httpd:
service httpd start
訪問URL: http://www.example.com:8000 看是否安裝成功。
c.安裝Tomcat(略)
安裝完成啟動后訪問 http://openam.example.com:8080看是否成功。
d.安裝OpenAM
從 OpenAM上下載 OpenAM企業版的.war文件。
將.war文件部署到Tomcat下
訪問 http://openam.example.com:8080/openam/ 看是否成功。
點擊主頁上的Create Default Configuration,同意協議。
設置默認用戶(amAdmin)的密碼為password,默認策略代理(UrlAccessAgent)的密碼為secret12,點擊Create Configuration進入配置OpenAM。
注意:以上密碼僅供這次測試用。amAdmin是OpenAM的管理員,擁有對OpenAM配置的一切控制權。在這篇文檔中 UrlAccessAgent並未用到。配置的管理員是超級用戶。
點擊Proceed to Login,用amAdmin身份登錄,成功后將進入 Realm 頁面。
OpenAM完成配置后,將自動在用戶的home目錄下新建~/openam/(/root/openam/)文件夾,里面含有Openam的配置信息,集成的OpenDJ目錄服務器。文件夾名字與服務器實例的名字相同(server instance),此外還有一個隱藏文件夾 ~/.openamcfg/,(/root/.openamcfg/)其中包含了OpenAM的啟動文件,如果你損壞了OpenAM的配置文件,或者想重新安裝OpenAM,最快的解決方法是關閉tomcat,刪除這兩個文件夾,重新配置OpenAM。
目前為止,OpenAM主服務器和OpenAM主機都配置完成。
e. 在OpenAM配置一個策略
策略(policy)是OpenAM驗證用戶並賦予用戶權利的根據。根據以下步驟將創建一個策略,賦予所有通過驗證用戶,在之前配置的Apache HTTP 主頁上行使HTTP GET的權利。
1. 打開OpenAM 控制台,在Realms頁面上選擇根域(Top level Realm)。
OpenAM將身份(identities),策略 (policies),策略代理信息(policy agent profiles)集成到realms里進行掛歷。
2. 點擊 Authorization > Polices > iPlanetAMWebAgentService > Add A New Policy
3. 在New Policy頁面上,輸入以下信息:
a. 名稱:輸入”Authenticated users can get Apache HTTP home page”供本次測試
b. 描述:輸入”This policy lets users who have authenticated to OpenAM access to the Apache home page."供本次測試
c. 資源類型:點擊下拉框,選擇”URL”供本次測試
d. 資源:在下拉框中選中”*://*:*/*”,然后輸入資源URL:http://www.example.com:8000/*,然后點擊 Add
點擊Create 保存設置。
4.在policy頁面上點擊Actions tab,輸入以下信息
a. 在action 下拉框上選中 GET,點擊Add action
b. 在action 下拉框上選中POST,點擊Add action
c. 點擊 Save Changes
5. 在policy頁面上點擊Subjects,輸入以下信息
a.選擇 All of ..
b. 在Type Section上點擊Edit標識,在下拉框中選中Authenticated Users,然后點擊checkmark。
c. 點擊 save changes
f. 創建web 策略代理簡介(policy agent profile)
OpenAM 存儲策略代理的profile默認是”集中式”(centralized)的,既保存在openam server端,而不是policy agent所在web容器。
策略代理(policy agent)在web應用所在容器上的安裝和啟動過程中,通過OpenAM server中設置的策略代理profile,得到相應的配置信息。管理員在OpenAM后台中修改profile的配置,策略代理端也能同步更新。
1. 在OpenAM控制台上,點擊Realms > Top Level Realm > Agents >Web,然后點擊New 在 Agents table
2. 輸入以下信息
Name : WebAgent
Password: password
Configuration: Centralized
Server URL: http://openam.example.com:8080/openam
Agent URL: http://www.example.com:8000
3. 點擊Create 保存 profile信息.
g. 安裝OpenAM Web 策略代理 ( policy agent)
OpenAM 策略代理是OpenAM中定義的策略的實施者,判斷用戶是否對請求的資源具有訪問權限是由OpenAM根據用戶信息(HTTP cookie中的SSO token)及設定好的策略做出決定。
策略代理在Apache HTTP Server中以 Library的形式運行,當Apache HTTP Server啟動的時候,它被載入。當請求到來,策略代理將用戶重定向到OpenAM進行身份驗證或者向OpenAM請求用戶授權結果。
1. 根據Apache HTTP Server的版本,在下載頁面上下載OpenAM policy agent。
這里選擇 3.3.0版本。
2.創建密碼文件,當代理安裝器(agent installer)第一次連接OpenAM時讀取。(密碼等於openam端設置的agent profile密碼)
3. 查看OpenAM 服務器 URL,保證OpenAM正在運行
http://openam.example.com:8080/openam
4. 停止Apache HTTP Server
$ service httpd stop
5. 安裝 策略代理
解壓下載的zip包,並進入文件夾中的bin目錄
$ cd /path/to/web_agents/apache22_agent/bin
運行agentadmin指令,輸入准確的信息
$ ./agentadmin ——instal ——acceptLicense
6. 啟動 Apache HTTP Server,安裝完成
1.4 驗證
1. 注銷 OpenAM控制台
2. 瀏覽 http://www.example.com:8000
此時,策略代理將攔截你對上頁面的請求,如果你的瀏覽器中並沒有一個包含了OpenAM session的cookie,因此你將會被重定向到OpenAM,進行身份驗證。
3. 輸入用戶名 demo ,密碼 changeit
一旦登陸成功,OpenAM設定了一個session cookie ,名稱為iPlanetDirectoryPro,域名為.example.com。
該域名為你訪問的web應用域名。
如果你在瀏覽器將查看這個cookie,你將看到類似AQIC5wM2LY4SfcwciyfvJcQDUIB7kIWEH187Df_txqLdAVc. *AAJTSQACMDEAAlNLABMxMDYwNzY1MjQ0NTE0ODI2NTkx*.的值。這是加密后的SSO Token值。Openam通過它來決定你的一系列身份操作,例如驗證,登陸,注銷。當這個session失效,你必須重新認證。
OpenAM session 用於 SSO(單點登陸)。OpenAM以此為依據進行授權判斷。
SSO session 終結的方式有幾種,例如:當瀏覽器session終結時,從OpenAM注銷時。OpenAM也設立了兩個限制:當session不活動一段時間(默認30分鍾),超過生命上限(默認2小時)。
4. 成功登陸后,你被重新定義到最初請求頁面。
在后台,OpenAM將你的瀏覽器重定義到你最初請求的頁面http://www.example.com:8000。web策略代理攔截該請求,發現SSO Token的存在,然后向OpenAM咨詢“該用戶是否有權限訪問http://www.example.com:8000”,OpenAM回復策略代理“同意通過”。因此策略代理允許Apache HTTP Server 返回請求頁面。
以上為部署一個簡單OpenAM 單點登錄的例子。
關於更多OpenAM的信息,請閱讀下文。
1.5 關於Stateless Session
在上文中提到的 名稱為iPlanetDirectoryPro的session cookie實際上保存的是一個定位信息,指向的是OpenAM服務器上真正的關於本次會話信息的保存位置。
關於這種保存在服務器內存中的session稱為有狀態Session(stateful session)。
OpenAM也支持無狀態Session(stateless session),既session保存在客戶端。
