摘要:文章整合JOSSO1.6+Struts2.0.11.1+Spring2.5.2+Hibernate3.2.6GA實現了一個具有較強擴展性、與其他系統的低耦合性、跨平臺性以及較高的安全性等優點的開放式的Web單點登錄平臺。借助于該平臺,只需對現有Web應用進行簡單配置,就能實現多個Web應用的單點登錄,重點介紹JOSSO的原理和單點登錄的實現過程。
關鍵詞:JOSSO;Web;單點登錄;Struts;Spring;Hibernate
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)23-974-04
1 概述
隨著信息技術的發展,計算機網絡在人們的工作和生活中所起的作用越來越大。許多企事業單位,特別是大型企事業單位都擁有許多的Web應用,比如協同辦公系統、人事管理系統、財務系統、資產管理系統等。由于這些系統互相獨立,用戶在使用每個應用系統之前都必須按照相應的系統身份進行登錄,為此用戶必須記住每一個系統的用戶名和密碼,并在不同系統之間來回切換,這給用戶帶來了不少麻煩。特別是隨著系統的增多,忘記密碼的可能性就會增加,受到非法截獲和破壞的可能性也會增大,安全性就會相應降低。針對這種情況,需要設計一個通用的系統平臺,對用戶身份進行統一認證,并且,身份認證以后,用戶在一定的時間內,可以無縫的訪問其他應用系統,即對多個Web應用實現單點登錄。
單點登錄,即SSO(Single-Sign-On)的定義是:在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它可以將這次主要的登錄映射到其他應用中,用于同一個用戶登錄。SSO的目的是提供一次認證用戶的安全方法,并使用該單點認證(針對會話過程)作為訪問其他應用程序、系統和網絡的基礎。現有的單點登錄技術方案雖然能在某些方面解決過去傳統認證的部分缺點,但還是存在系統擴展性不強、系統改造工作量大、兼容性和可移植性差、安全策略不夠完善等缺點。本文研究的目的是實現了一個具有較強擴展性、與其他系統的低耦合性、跨平臺性以及較高的安全性等優點開放式的平臺。
2 平臺結構
2.1 系統總體結構
SSO平臺主要由三大部分組成:統一用戶角色管理平臺、統一驗證平臺JOSSO、及其他Web應用系統(根據需要可以集成多個系統)。
2.2 統一用戶角色管理平臺
該平臺是一個獨立的系統,主要負責統一用戶和角色的管理,作為用戶一次登錄的入口,管理用戶信息、角色信息和用戶與角色的對應信息,可對不同的用戶指定不同的角色,而其中的角色賦予應各Web應用系統的不用資源的訪問權限。
2.2.1 結構圖
2.2.2 實現架構
系統采用Struts2.0.11.1、Spring2.5.2、Hibernate3.2.6GA框架,利用各自的優點,分層實現系統的開發,Struts主要負責表現層的實現,Spring主要負責業務層的實現,Hibernate主要負責數據持久層的實現。
2.3 統一驗證授權平臺JOSSO
2.3.1 JOSSO的體系結構
JOSSO,或者說Java開放式單點登錄,是一個基于J2EE的單點登錄的基礎設施的開源項目,其目的是提供一種集中的,平臺中立的,用于用戶驗證和授權的解決方案。
JOSSO具有以下特點:
可插拔框架:它提供了一個面向組件的基礎設施,支持創造和整合多重認證方案,信任證書及session的存放。
透明的集成:合作伙伴的Web應用(即要參與到單點登錄中去的Web應用)整合到單點登錄時不需要依賴于任何一個專有的API 。 JOSSO處理整個認證流程,使用戶的身份通過Servlet和EJB的APIs分別地適用于網絡應用與EJB組件。
跨域和跨組織的單點登錄:它允許用戶只要一次加入安全證書,用戶的身份識別就可以跨域和跨組織進行。
跨平臺:它允許整合Java和非Java應用程序,如PHP或微軟ASP的應用程序。它采用基于HTTP上的標準的簡單對象訪問協議(SOAP)作為標準的通信層以提供這種跨平臺的功能。
致力于開放式標準:其安全基礎設施是基于JAAS, Web Services/SOAP,EJB, Servlet/ JSP和Struts的標準。
2.3.2 JOSSO的主要內容
單點登錄網關:作為單點登錄的服務器或身份提供商,并為在合作伙伴應用中需要認證的用戶提供認證服務。
單點登錄代理:作為單點登錄網關的客戶端,其中認證的請求授予對用戶保護資源訪問,管理整個用戶認證流程。該單點登錄代理驗證單點登錄的Session,并獲得相關的用戶信息,區別于使用SOAP協議的單點登錄網關的Web服務。
合作伙伴的應用:作為Web應用程序或服務提供者,其利用單點登錄網關服務,以驗證用戶身份。
3 平臺實現過程
3.1 JOSSO認證流程
將一個WEB應用通過JOSSO集成到單點登錄中去的流程如下:
1)用戶從某一合作者應用中請求一個受保護的資源。
2)SSO代理攔截用戶的請求以保護合作者應用資源,因為該用戶請求未經過確認,代理將其轉發到位于SSO網關上的單點登錄表單中。
3)用戶在表單中填入他的/她的信任證書,這些證書依賴于其選擇的認證方案。這些方案可能要求一種用戶名加密碼的形式或是一個符合X.509協議的客戶端證書。
4)SSO網關處理用戶提交的表單,從預先配置好的存儲介質(比如輕量級目錄訪問協議LDAP,數據庫等)中導出用戶的信任證書以驗證用戶身份的有效性。
5)如果用戶的信任證書是有效的,那么用戶身份就通過了認證,同時生成SSO的Session盾牌(token)并將用戶他或她的Session保存在Session庫中。隨后,用戶的請求將被轉發到之前請求的受保護資源中。
6)SSO代理攔截用戶請求以保護合作者應用資源,并使用SSO網關的JAAS登錄模塊驗證用戶Session的有效性,同時使用SOAP從SSO網關獲得被認證的主題。
7)SSO網關從Session管理庫中取出用戶的Session標志并從身份標志管理庫中獲得相關用戶的信息。
8)SSO代理引入被認證的主題,這些主題是從SSO網關的Web服務在HTTP請求中返回的。同時SSO代理將這些主題提交給目標Web應用。
9)Web應用程序處理HTTP請求,并最終利用getUserPrincipal()和isUserInRole()方法操作HttpServletRequest實例,以獲取經過身份認證的用戶的標志,進而執行額外的安全斷言。
3.2 實現過程
3.2.1 部署Web容器
本文采用apache-tomcat-6.0.14作為Web容器,確保正確設置環境變量TOMCAT_HOME和CATALINA_HOME指向Tomcat的安裝目錄。默認用戶已經安裝JDK并設置好環境。建議用戶安裝jdk6.0。
3.2.2 集成JOSSO
在www.josso.org下載JOSSO1.6或最新版本,獲得josso.war包,放到Tomcat下webapps目錄下。同時拷貝josso-1.6.jar、josso-common-1.7.jar、josso-tomcat6-plugin-1.7.jar到運行環境中。
3.2.3 配置單點登錄網關
在Tomcat目錄下的bin目錄中創建網關配置文件josso-gateway-config.xml,其主要是配置JOSSO網關使用的核心組件,如Authenticator(認證者),該組件負責實現一個具體的認證方案;IdentityManager(身份管理員),該組件負責利用已經配置好的認證者來識別用戶身份,同時管理經過認證的用戶的Session;SessionManager(Session管理員)該組件負責管理一個單點登錄的用戶的Session的生命周期等。
該配置文件是JOSSO實現的核心,控制著用戶身份的認證和授權,關鍵在于配置Authenticator,這里選用的認證方案是UsernamePasswordAuthScheme方案,即用戶名加密碼的認證方式,其中可以對密碼進行HASH處理,此處采用MD5對密碼進行處理,只需添加配置
用戶的驗證通過JDBCIdentityStore從數據庫中取得。因為此處采用的是數據庫存放用戶的驗證信息,包括用戶名和用戶密碼等信息。配置為
這里主要跟本平臺的統一用戶角色管理平臺產生了結合點,就是說,所有的合法用戶的信息,包括用戶名、密碼、角色等都由統一用戶角色管理平臺來進行管理。而這些信息跟其他Web應用的用戶等信息是相互獨立的。使得本平臺與其他Web應用的低耦合集成。
通過配置
3.2.4 配置參與單點登錄的Web應用
在Tomcat的bin目錄下創建文件josso-agent-config.xml,其主要實現Web應用集成到單點登錄中。
其中關鍵是配置Web應用集成,通過配置一個或多個
其中的context為Web應用的名稱。這時應將Web應用拷貝到Tomcat目錄下的webapp目錄下,與josso應用同目錄。
3.2.5 對Web應用進行簡單改造
修改Web應用的web.xml文件,在其最后添加
3.2.6 實現統一用戶角色管理平臺
至此,Web應用的集成基本完成,接下來就是要統一管理上面提到的用戶、角色及其對應關系。對所有的用戶集中管理,實現從原先一個用戶使用幾個Web應用就要幾套密碼到一套密碼實現多個Web應用的統一管理。平臺采用Struts、Spring、Hibernate的時下最新版本集成開發,實行分層管理,平臺可擴展性比較強,移植方便。平臺對用戶密碼進行了MD5處理,所以password存放的是32個字符組成的串形式。
1)數據庫設計
這里使用SQL Server 2000來存放用戶的登錄信息。建立三張表。
用戶表User,如表1所示,用于存放用戶的登錄信息,包括用戶編號、登錄名稱、登錄密碼、用戶名稱、用戶描述等。
角色表Role,如表2所示,存放角色信息,包括角色編號、角色名稱、角色描述等,注意角色名稱不能有同名存在。
用戶角色表User_Role,如表3所示,存放用戶與角色的對應關系,相當于一張中間表,操作映射關系時就只需修改此表的記錄。
2)用戶管理
實現用戶管理界面如圖4,可以在此統一實現增加用戶、刪除用戶、查詢用戶、修改用戶、為用戶分配角色等操作。
3)角色管理
實現角色管理界面如圖5,可以在此統一實現增加角色、刪除角色、查詢角色、修改角色、查看該角色有哪些用戶等操作。
4)用戶角色管理
在用戶管理界面選擇某一用戶,點擊“分配角色”,跳到如圖6。此處可以對某一用戶進行分配角色操作,其中選中的為用戶已有的角色。這樣的話,用戶就具有了其所有角色具有的權限。
只要用戶在統一登錄入口登錄系統后,就可以訪問所有的授權資源了。
4 結論
本文實現了一個開放式的單點登錄平臺,通過前面的介紹,可以看出,平臺具有較強擴展性、兼容性、與其他系統的低耦合性、跨平臺性以及較高的安全性等優點。JOSSO是整個系統的核心,其通過一次對來訪者進行身份驗證,為合法用戶分配一個唯一的Token標志,即一個SessionID,對其進行了MD5處理,并存放到Session庫中(如Cookie、數據庫或LDAP等容器),當用戶再次發起訪問請求時,單點登錄網關的JAAS登錄模塊驗證用戶Session的有效性,同時使用SOAP從單點登錄網關獲得被認證的主題。單點登錄網關從Session管理庫中取出用戶的SessionID并從身份標志管理庫中獲得相關用戶的信息,這一切對用戶來說是透明的,同時又保障了用戶信息的安全性。這樣用戶使用多個參與到單點登錄的系統時,就只需記住統一平臺的登錄密碼,就能安全有效的訪問相應的資源,而對于該密碼,系統也對其進行了MD5處理,用戶要做的就是牢記該密碼,可以適當的復雜一些,畢竟只有這么一個密碼要記住,而這個密碼又是如此的重要,因此傳輸時建議使用SSL連接等措施保護密碼,當然這不屬于本系統的討論范疇。
系統采用純Java開發實現,可以跨平臺移植。通過對現有Web應用的簡單改造,只需修改其Web配置文件,進行簡單的設置,就可以將Web應用集成到單點登錄系統中,同時,由于系統提供了統一的用戶角色管理平臺,簡化和規范了系統的管理,從而簡化了管理的難度,提高了網管人員的工作效率,減少了出錯了機會,具有較高的實用價值。
改進:
由于系統只能處理B/S模式的Web應用,有一定的局限性,因為有的系統是C/S模式的,本系統對其實現單點登錄缺少支持。
參考文獻:
[1] 林菲.統一身份認證下的單點登錄[J].網絡安全技術與應用,2006,(10):41-43.
[2] 李曉陽.基于SPKM的單點登錄的研究[J].計算機工程與應用,2005,(3):128-201.
[3] 盧開澄.計算機密碼學——計算機網絡中的數據保密與安全[M]. 3版. 北京:清華大學出版社,2003.