摘 要:首先介紹了基于J2EE的應(yīng)用服務(wù)器的體系結(jié)構(gòu)和安全需求,并以此作為基礎(chǔ),給出了其安全模型。之后詳細(xì)討論了模型的主要組成部分,提出一種基于JAAS可擴展的J2EE安全服務(wù)設(shè)計方案,并給出了主要部分的實現(xiàn)。該方案解決了J2EE應(yīng)用服務(wù)器的主要安全問題,滿足了J2EE的安全需求。
關(guān)鍵詞:J2EE; 安全模型; JAAS; 設(shè)計方案
中圖分類號:TN713.1 文獻標(biāo)識碼:B
文章編號:1004-373X(2010)13-0107-03
Research and Design of Security Server Based on J2EE
YIN Feng-she,JIAO Lei
(Sh
nxi Polytechnic Institute, Xianyang 712000, China)
Abstract: The architecture and security demands of an application server based on J2EE are introducd. The security model of J2EE application server is presented. The main parts of the security model is discussed in detail. A design scheme of the scalable J2EE security server based on Java authentication and authorization service (JAAS) is proposed. The major security issues of J2EE application server were solved to meet the security requirements of J2EE.
Keywords: J2EE; security model; JAAS; design plan
J2EE應(yīng)用服務(wù)器安全模型的核心是安全服務(wù),安全服務(wù)為容器和組件提供安全認(rèn)證、授權(quán)和審計服務(wù),本文討論了安全服務(wù)的架構(gòu),并給出了安全服務(wù)的主要部分:認(rèn)證服務(wù)、授權(quán)服務(wù)、安全會話管理器和審計服務(wù)的設(shè)計。
1 安全服務(wù)架構(gòu)
安全服務(wù)由以下幾個主要部件構(gòu)成:認(rèn)證服務(wù)、訪問控制服務(wù)、用戶信息目錄、安全策略庫、審計服務(wù)、會話管理器、安全服務(wù)管理接口、安全服務(wù)管理控制臺和安全服務(wù)客戶。J2EE安全服務(wù)通過認(rèn)證器、訪問控制器和審計器3個接口向外界提供安全服務(wù),而安全服務(wù)的安全元信息保存在用戶信息目錄和安全策略庫中[1]。
為了讓安全服務(wù)成為一個通用的客戶無關(guān)的服務(wù),安全服務(wù)獨立于J2EE環(huán)境運行,這樣可以為不同類型的應(yīng)用服務(wù)器和應(yīng)用程序提供訪問控制機制。
2 認(rèn)證器和用戶信息目錄
認(rèn)證器[2]的目的是將外界提供認(rèn)證信息的用戶映射為系統(tǒng)平臺內(nèi)部的用戶,通過認(rèn)證信息標(biāo)識用戶的身份。為了保證認(rèn)證機制的可擴展性和靈活性,認(rèn)證器在設(shè)計時有以下原則:
(1) 認(rèn)證器需要具備對不同類型認(rèn)證機制的潛在支持,如密碼認(rèn)證、證書認(rèn)證。
(2) 認(rèn)證器對同一種認(rèn)證機制必須能夠支持多種不同類型的用戶信息目錄。
(3) 必須提供對一個用戶多種認(rèn)證方式的支持。
(4) 必須支持現(xiàn)存遺留的用戶信息目錄和認(rèn)證機制。
由于JAAS[3]實現(xiàn)了標(biāo)準(zhǔn)Plugable Authentication Module(PAM)框架的可插撥認(rèn)證機制,采用JAAS作為認(rèn)證服務(wù)的實現(xiàn)機制,將JAAS的不同認(rèn)證域映射為認(rèn)證服務(wù)的不同認(rèn)證機制,而將JAAS認(rèn)證域中的LoginModule 映射為不同的用戶信息目錄認(rèn)證支持。
認(rèn)證器對不同認(rèn)證機制的支持可以采用對象模型方式建模[4],對象模型如圖1所示。
認(rèn)證器Authenticator 的接口定義如下:
public interface Authenticator{public SessionToken authenticate(Principal principal, Credential credential) throws AuthenticationException;}
認(rèn)證器的Authenticate()方法完成用戶認(rèn)證功能,不同的認(rèn)證機制傳入不同類型的Principal和Credential 值,認(rèn)證器根據(jù)傳入Principal 和Credential 的類型,自動選擇適合的認(rèn)證方式,映射到JAAS認(rèn)證域,并使用JAAS進行認(rèn)證。同時通過將LoginModule 的標(biāo)志設(shè)置為sufficient,保證必須至少有一個用戶信息目錄認(rèn)證通過才能通過系統(tǒng)認(rèn)證。系統(tǒng)應(yīng)該提供一個基礎(chǔ)的LoginModule 基類,用于收集所有必須的用戶信息,從而提供構(gòu)造適合的令牌需要的用戶信息。
圖1 支持多種認(rèn)證機制的對象模型
用戶信息目錄中的用戶信息包含用戶認(rèn)證需要的特定認(rèn)證的信息以及其他的信息,這些信息和一個特定的系統(tǒng)用戶關(guān)聯(lián),系統(tǒng)用戶通過一個全局惟一的用戶標(biāo)識符ID來標(biāo)識。用戶認(rèn)證完成之后,訪問系統(tǒng)的用戶被映射為系統(tǒng)中惟一標(biāo)識的用戶,該用戶標(biāo)識和用戶認(rèn)證信息在建立安全會話過程中與安全會話建立關(guān)聯(lián)。
3 安全會話和安全會話管理器
當(dāng)用戶認(rèn)證之后,用戶認(rèn)證狀態(tài)的安全持久保持和驗證通過安全會話進行,認(rèn)證器認(rèn)證用戶后會使用會話管理器建立一個安全會話,將所有用戶的安全信息和會話綁定。會話管理器[5]負(fù)責(zé)統(tǒng)一管理所有用戶認(rèn)證之后的安全會話,會話管理功能可分為兩類:操作型和管理型。會話管理對象模型如圖2所示。
圖2 安全會話管理對象模型
用戶認(rèn)證完之后,安全會話管理器給用戶建立一個安全會話,安全會話通過返回給用戶的會話令牌標(biāo)識,會話令牌包括的信息有:認(rèn)證方式、認(rèn)證方式相關(guān)信息、用戶標(biāo)識符、認(rèn)證Principal和Credential 等,安全會話上下文由用戶獲得的安全令牌表示。
在用戶退出系統(tǒng)時,會話管理器撤銷用戶會話,并刪除所有用戶登錄后生成的信息。在用戶訪問控制過程中,用戶相關(guān)的安全信息可以通過用戶會話的會話令牌獲得。
4 訪問控制器和訪問控制策略
訪問控制器的目的是提供對多種不同類型資源各種級別的訪問控制,它使用認(rèn)證之后用戶的標(biāo)識和安全策略庫中的安全訪問控制策略元信息來判斷登錄系統(tǒng)的用戶有無對特定資源的特定的訪問權(quán)限,它所采用的是聲明式訪問控制機制。
為了提供訪問控制服務(wù)的可擴展性和靈活性,訪問控制器的設(shè)計必須遵循以下原則[6]:
(1) 能夠擴展支持多種不同類型的訪問控制策略,如基于角色的訪問控制、基于規(guī)則的訪問控制;
(2) 必須能夠提供對不同類型策略庫的支持,如基于XML 文件的策略庫和基于LDAP 的策略庫;
(3) 必須能夠提供對各種不同類型的資源進行訪問控制,提供對各種定制權(quán)限和定制資源的管理;
(4) 訪問控制機制必須獨立于認(rèn)證器所采用的認(rèn)證機制,即與用戶的認(rèn)證方式無關(guān)。
訪問控制機制的核心是訪問控制策略,參考文件系統(tǒng)的訪問控制策略[7],將資源使用目錄結(jié)構(gòu)按名字空間以層次型結(jié)構(gòu)組織,并對層次結(jié)構(gòu)中的所有的節(jié)點配置各種類型的安全訪問控制策略,這樣,安全訪問控制策略按照資源的層次組織方式為基礎(chǔ)進行組織??梢詫①Y源或者按資源的類型,或者按資源所屬的應(yīng)用程序包劃分為多個名字空間。
資源通過系統(tǒng)惟一的統(tǒng)一資源標(biāo)識符URI標(biāo)識,URI的名字組織方式采用資源層次結(jié)構(gòu)中的資源層次名字統(tǒng)一組織,這樣在安全策略庫中每一個資源都有特定的標(biāo)識符來惟一表示。
與資源相關(guān)的還有權(quán)限問題,不同的資源其可訪問的權(quán)限是不一致的。對于Web資源,可訪問的權(quán)限限于幾種標(biāo)準(zhǔn)的HTTP方法,但是對于EJB資源[8],不同的EJB組件可以被外界調(diào)用的方法是不一致的。為了使安全訪問控制系統(tǒng)支持不同類型的權(quán)限,提供權(quán)限的擴充,圖3給出針對不同類型資源的權(quán)限模型。
圖3 權(quán)限的抽象模型
Right 抽象了所有的權(quán)限,各種不同類型資源的特定權(quán)限通過擴展Right 插入安全服務(wù)系統(tǒng)中。所有與特定資源類型相關(guān)的權(quán)限信息被封裝在特定類型的Right 擴展類中。
訪問控制器AccessController 完成對資源訪問的授權(quán)檢查,它通過使用當(dāng)前的安全會話、需要訪問的資源對象和需要的權(quán)限對訪問策略檢查完成。訪問控制器的接口定義如下:
public interface AccessController {public void check(SessionToken token,Resource resource,Right right) throws AuthorizationException; }
5 安全審計
安全審計[9]的目的是對用戶的認(rèn)證過程、認(rèn)證之后的安全活動、對資源訪問控制的安全授權(quán)過程以及管理員對安全策略庫的管理過程等所有涉及到安全的活動進行記錄。
安全服務(wù)支持各種類型的審計策略,通過標(biāo)準(zhǔn)的接口,可以按照訪問的用戶、被訪問的資源或者進行的操作進行審計的控制,審計器使用安全服務(wù)上的審計策略來控制和實施審計過程。審計日志記錄了所有的審計信息,通過安全管理接口,可以瀏覽系統(tǒng)所有安全相關(guān)的審計記錄。通過一個標(biāo)準(zhǔn)的接口,安全服務(wù)支持各種類型的審計日志實現(xiàn)。審計機制的對象模型如圖4所示。
圖4 可擴展的審計模型
6 安全管理接口和安全管理控制臺
安全管理的目的是提供對認(rèn)證機制、授權(quán)機制和審計機制的相關(guān)信息進行配置和管理。對認(rèn)證機制的配置和管理主要涉及JAAS域認(rèn)證映射、用戶信息目錄配置、用戶信息管理,其目的是提供針對不同應(yīng)用需求為用戶定制認(rèn)證機制和用戶信息目錄。
為了提供上面提到的對認(rèn)證、授權(quán)和審計機制的管理目標(biāo),安全服務(wù)管理應(yīng)該能夠提供如下的功能:
(1) 獲得某資源相關(guān)的所有安全訪問控制策略;
(2) 添加和刪除安全訪問控制策略;
(3) 獲得某資源的所有可能的權(quán)限;
(4) 對被管理資源添加和刪除權(quán)限;
(5) 添加新的資源類型;
(6) 添加、刪除用戶;
(7) 添加、刪除審計策略。
由于所有的認(rèn)證策略、訪問控制策略和審計策略都存儲在安全策略庫中,安全管理的過程實際上就是對安全策略庫的管理。安全管理接口通過安全策略庫接口對各種遵循標(biāo)準(zhǔn)接口的安全策略庫進行統(tǒng)一管理。安全管理對象模型[10]如圖5所示。
圖5 安全管理對象模型
PolicyManager包裝了所有的安全管理相關(guān)的操作,通過PolicyManager接口可以對策略庫進行操作完成上面提到的功能。
把對安全策略庫及其他安全信息的管理功能包裝成一個API接口,其優(yōu)點是可以對這些API的訪問設(shè)置安全策略,如授權(quán)策略、審計策略。這樣系統(tǒng)的安全控制機制就可以控制和跟蹤管理員對系統(tǒng)的安全管理過程。
7 結(jié) 語
安全訪問控制是中間層應(yīng)用服務(wù)器提供給運行時組件的重要功能,這里提出的J2EE應(yīng)用服務(wù)器安全機制的架構(gòu)解決了J2EE應(yīng)用服務(wù)器的主要安全問題,滿足了J2EE的安全需求。同時,該安全架構(gòu)從設(shè)計上具有可移植、通用性、可擴展性和靈活性。
參考文獻
[1]Taligent Inc.. Building object-oriented frameworks[ M] . [ S.l.] : Taligent Inc., 2005.
[2]PERRONE Paul J.J2EE構(gòu)建企業(yè)系統(tǒng)專家級解決方案[ M] .張志偉,譚郁松,張明杰,譯.北京:清華大學(xué)出版社,2001.
[3]LI Gong.Java 2平臺安全技術(shù)——結(jié)構(gòu)、API設(shè)計和實現(xiàn)[ M] .王韻凱,石磊,譯.北京:機械工業(yè)出版社,2000.
[4]Jamie Jaworski.Java安全手冊[ M] .邱仲潘,譯.北京:電子工業(yè)出版社,2007.
[5]LAI Charlie, LI Gong, KOVED Larry, et al. User authentication and authorization in the Java(TM) platform[ C] //CSAC. Processings of the 15th Annual Computer Security Applications Conference. AZ: CSAC, 2008: 51-59.
[6]WOLFGANG Pree. Design patterns for object-oriented software development[ M] . [ S.l.] : Addison-Wesley Publishing, 2008.
[7]VOGEL Andreas. Enterprise application for the net with EJB, CORBA and XML[ M] . [ S.l.] : Inprise Corporation,2005.
[8]Tanenbaum A S.分布式操作系統(tǒng)[ M] .陸麗娜,伍衛(wèi)國,劉隆國,等譯.北京:電子工業(yè)出版社,1999.
[9]WU Jie.分布式系統(tǒng)設(shè)計[ M] .高傳善,譯.北京:機械工業(yè)出版社,2001.
[10]WAHL M, HOWES T, KILLE S. RFC2251: Lightweight Directory Access Protocol[ S] . [ S.l.] : Network Working Group, 1997.