摘要:JAAS為J2EE和J2SE應(yīng)用提供安全的訪問控制保證。文中給出一種基于XACML的JAAS的擴(kuò)展框架,無須改變JAAS的安全代碼,實現(xiàn)了實例屬性級的細(xì)粒度訪問控制,從而為J2EE和J2SE應(yīng)用提供了標(biāo)準(zhǔn)的端到端的訪問控制。
關(guān)鍵詞:J2EE;XACML;JAA;訪問控制
中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)32-1111-03
The Extension of JAAS-Security Based XACML
PEI Hao,TIAN Jun,GUO Jian-liu
(Changzhou Textile Garment Institute,Changzhou 213164,China)
Abstract: JAAS provided secure access control for J2EE and J2SE.It is presented in this article that the Extension of JAAS-Security Based XACML,which provides class-instance attribute and fine-grain access control without changing JAAS security codebase,provides standard end to end access control for J2EE and J2SE.
Key words: J2EE; XACML; JAAS; access control
1 引言
JAAS(Java Authentication and Authorization Service,Java認(rèn)證和授權(quán)服務(wù)),為J2EE和J2SE企業(yè)級應(yīng)用提供了安全的訪問控制保證,然而JAAS的應(yīng)用是與代碼緊密聯(lián)系的,隨著具體應(yīng)用的改變,JAAS安全代碼和策略等也要隨之作大量改變。文中給出了一種基于XACML(Extensible Access Control Markup Language,可擴(kuò)展訪問控制標(biāo)記語言)的JAAS擴(kuò)展框架,將JAAS與XACML框架相結(jié)合擴(kuò)展JAAS,從而滿足Java細(xì)粒度訪問控制的要求。
2 JAAS與XACML
2.1 JAAS
JAAS是以“用戶為中心的授權(quán)模型”,由一系列的API集組成的。與Java2策略相比,JAAS增加了面向主體的策略,被認(rèn)證的用戶稱為Subject,而一個主體(Subject)可能有一個或多個身份(Principal),每個身份定義了一個Subject的指代信息從而能夠用來代表任意的實體,主體相關(guān)的屬性則稱為憑證(Credential)。JAAS使用javax.security.auth.Subject類來封裝主體,當(dāng)JAAS進(jìn)行授權(quán)時,根據(jù)JAAS策略文件來判定只有符合策略的用戶才能在特定的時刻對特定的資源執(zhí)行特定的操作。
然而JAAS并不支持對象屬性級安全策略的定義,比如說JAAS的策略定義只能定義到“部門經(jīng)理可以編輯普通員工的工資信息”,而不支持“部門經(jīng)理只能編輯其下屬員工的工資信息”這樣屬性級的策略,很明顯,這不滿足更高安全策略的需求。
2.2 XACML
XACML給出了一個標(biāo)準(zhǔn)化的訪問控制決策模型,提供屬性級的訪問控制。圖1描述了XACML的訪問控制實施過程,訪問請求首先到達(dá)PEP(Policy Enforcement Point,策略強(qiáng)制點),創(chuàng)建XACML請求提交至PDP(Policy Decsion Point,策略決策點),PDP依據(jù)訪問控制策略對訪問請求進(jìn)行評估,返回一個響應(yīng)。PAP(Policy Administrator Point,策略管理點)負(fù)責(zé)策略的構(gòu)建與管理,以供PDP決策使用。PDP可以調(diào)用PIP(Policy Information Point,策略信息點)來檢索與主體、資源或者環(huán)境相關(guān)的信息。PEP依據(jù)PDP的授權(quán)決策作出響應(yīng),允許或拒絕用戶的訪問請求。
3 基于JAAS的XACML擴(kuò)展
3.1 JAAS的可擴(kuò)展性
JAAS的安全性取決于訪問資源的代碼及策略文件。基于JAAS的可插入特征,編寫認(rèn)證和授權(quán)子模式可以改變JAAS的默認(rèn)行為,從而擴(kuò)展JAAS。因此,為了實現(xiàn)JAAS的實例屬性級訪問控制,可以對以下JAAS標(biāo)準(zhǔn)接口進(jìn)行擴(kuò)展:
1) java.security.Principal:Principal定義了抽象的接口,來代表一個實體比如個體、組織和登錄id,可以通過接口增加Principal屬性來實現(xiàn)授權(quán)。
2) java.security.Permission:Permission權(quán)限類用在兩個地方:①策略文件,代表用戶的Permission。②在代碼中構(gòu)建Permission對象。AccessController調(diào)用Permission的checkPermission來驗證請求者是否有權(quán)限來執(zhí)行所請求的操作。
3) java.security.PermissionCollection:此抽象類是Permission對象的集合類,將用戶請求的Permission權(quán)限與集合元素逐一作比較。
4)java.security.Policy:此抽象類是安全策略類。AccessController根據(jù)策略文件來獲取主體對代碼的Permission權(quán)限集合,并返回PermissionCollection對象。
另外,JAAS擴(kuò)展應(yīng)遵循如下的原則:
1) JAAS作為Java的安全標(biāo)準(zhǔn),擴(kuò)展應(yīng)該遵守JAAS安全框架。
2) 擴(kuò)展應(yīng)該提供細(xì)粒度的訪問控制。
3) 擴(kuò)展應(yīng)該盡量不改變?nèi)魏伟踩a即可實現(xiàn)安全策略的更改。
通過以上分析可知,如果通過代碼實現(xiàn)JAAS的擴(kuò)展,由于應(yīng)用的變化,則需不斷修改安全代碼,其實現(xiàn)難度可想而知,并且代碼也無重復(fù)可用性。而基于XACML的JAAS擴(kuò)展提供了一種安全、靈活、標(biāo)準(zhǔn)化的擴(kuò)展方法,并且滿足上述原則。
3.2 基于XACML的JAAS擴(kuò)展框架
如圖2所示給出了基于XACML的JAAS的擴(kuò)展框架。其中PEP相當(dāng)于AccessController,GenericPolicy和GenericPermission類等則是JAAS接口的擴(kuò)展,其具體在下文得到描述。PDP根據(jù)上下文處理器所提供的一系列屬性值作出授權(quán)決定。上下文處理器處理應(yīng)用對象的映射,將特定對象的格式轉(zhuǎn)化成XML格式以便PDP的理解。
3.2.1 XACML-JAAS接口擴(kuò)展
下面使用聲明性的方式實現(xiàn)XACML-JAAS接口的擴(kuò)展:
1) GenericPermission:Permission類的擴(kuò)展。GenericPermission類構(gòu)造器將請求的資源作為輸入,并將資源類對象傳遞給Permission對象,以支持XACML屬性級的授權(quán)。同時,GenericPermission. implies函數(shù)通過調(diào)用資源對象的getter方法來獲取XACML執(zhí)行所需要的相關(guān)屬性包括動作的屬性,對象的屬性以及環(huán)境變量等。
2) GenericPolicy:Policy類的擴(kuò)展,GenericPolicy的getPermissions方法解析XACML策略文件,檢索策略中所有的包含特定主體和代碼的GenericPermission,并返回權(quán)限集合類GenericPermissionCollection。
3) GenericPermissionCollection:代表GenericPermission對象的集合。
3.2.2體系結(jié)構(gòu)
由于XACML框架有較好的靈活性,而JAAS代碼的改變主要在getPermissions接口,因此并不影響XACML整體的執(zhí)行。框架的基本結(jié)構(gòu)如下:
1) PEP調(diào)用GenericPolicy.的getPermissions方法,它的功能包括獲取策略等。因此,在擴(kuò)展框架中,getPermissions屬于PDP的一部分,類似于PDP的初始化過程。
2) 一旦PEP收到GenericPermissionCollection集,則調(diào)用GenericPermissionCollection的implies函數(shù),并列出GenericPermission,并對每一個GenericPermission調(diào)用implies函數(shù)。
3) 上下文處理器借助于Xstream或者SYS-CON將JAVA對象轉(zhuǎn)化成XML對象,資源的每個屬性在XML文檔中用XPATH表達(dá)式來表示。
4) 上下文處理器獲取getter方法的返回值,然后構(gòu)建授權(quán)請求提交給PDP。GenericPermission的implies方法是PDP的核心,它評估策略/規(guī)則,并返回決定給PEP。
3.2.3 具體實現(xiàn)
假設(shè)對資源的所有動作都是通過函數(shù)來完成的,因此對資源的保護(hù)等同于對訪問資源的函數(shù)的保護(hù)。為了實現(xiàn)這一點,GenericPermission對象的構(gòu)造,需要三個參數(shù):主體類、動作、資源。比如拍賣師對拍賣品執(zhí)行更新操作,給出如下函數(shù):
updateAction() {
Permission perm = new GenericPermission(String auction, String update, Object auction1);
AccessController.checkPermission(perm);
}
首先創(chuàng)建GenericPermission對象,代表著相應(yīng)的權(quán)限請求,然后AccessController將GenericPermission對象作為參數(shù)傳遞給checkPermission函數(shù),這樣可以通過GenericPermission對象判別出相應(yīng)的權(quán)限。其具體代碼執(zhí)行過程如圖3所示。
1) 創(chuàng)建GenericPermission對象,作為參數(shù)傳給checkPermission,并調(diào)用策略文件。而AccessController修改java.security文件中的auth.policy.provider參數(shù),使得可以根據(jù)GenericPolicy定義的XACML策略來作出授權(quán)決定。
2) GenericPolicy類使用getPermission方法來解析XACML文件,查找給定主體和代碼的權(quán)限,并返回GenericPermissionCollection。
3) 獲取到GenericPermissionCollection后,AccessController調(diào)用GenericPermissionCollection的implies函數(shù),查看GenericPermissionCollection集中是否包含所請求的權(quán)限。如果GenericPermission.implies返回true,AccessController則返回真,否則拋出AccessControlException異常。
其中,GenericPermission.implies函數(shù)使用資源實例對象的getter映射方法來獲取策略所需的屬性值,可見,如果策略發(fā)生改變則并不影響implies函數(shù)本身代碼。而在擴(kuò)展前JAAS中,即使有細(xì)微的改變,安全代碼也要隨之改變。
4 結(jié)束語
文中基于XACML對JAAS作了改進(jìn),不僅實現(xiàn)了聲明性的接口擴(kuò)展,而且通過Java映射技術(shù)和XACML的合理運(yùn)用,無須大量改變JAAS代碼即可提供屬性級細(xì)粒度訪問控制。同時支持使用XACML來描述Java安全策略,從而在J2EE和J2SE應(yīng)用中提供一致及標(biāo)準(zhǔn)的安全策略描述。
參考文獻(xiàn):
[1] OASIS Standard.eXtensible Access Control Markup Language(XACML) Version 1.0 [EB/OL].http://www.oaisis-open.org/committees/xacml.
[2] 於光燦.在Java2環(huán)境中實現(xiàn)可插入的認(rèn)證及訪問控制[J].計算機(jī)工程與科學(xué),2007,29(2):26-28.
[3] 李黎青.基于J2EE的電子商務(wù)交易平臺安全分析與設(shè)計[J].合肥工業(yè)大學(xué)學(xué)報:自然科學(xué)版,2008,31(5):763-767.
[4] 何建民.基于JAAS的身份安全認(rèn)證系統(tǒng)設(shè)計與應(yīng)用[J].合肥工業(yè)大學(xué)學(xué)報:自然科學(xué)版,2006,29(11):1405-1407.
[5] 周懷芬.基于JAAS的安全認(rèn)證授權(quán)方案的實現(xiàn)[J].天津理工大學(xué)學(xué)報,2006,22(4):27-29.
[6] 王子才.基于XACML訪問控制技術(shù)的應(yīng)用研究[D].大連:大連海事大學(xué),2006.