專利名稱:用于Java的一般聲明性授權方案的制作方法
技術領域:
本發(fā)明的實施例一般涉及軟件應用開發(fā),特別是涉及基于Java的安全性和授權軟件應用開發(fā)系統(tǒng)與方法。
背景技術:
安全性和授權在軟件系統(tǒng)的開發(fā)、部署和運行中扮演著非常重要的角色??蓮拿绹永D醽喼菔ニ死腟un Microsystems公司獲得的Java是用于基于組件的軟件與系統(tǒng)的最流行的平臺。另外,Java安全性在電子商務企業(yè)系統(tǒng)中扮演著關鍵的角色。安全性特征典型地以即興(ad-hoc)的方式被內建到應用之中,或者與使用容器管理的認證和授權的企業(yè)J2EE(Java2平臺企業(yè)版)—可從美國加利福尼亞州圣塔克拉拉的Sun Microsystems公司獲得—應用集成在一起。這種情況有幾個原因。首先,安全性必須由應用的幾乎全部組件處理;然而,其在軟件開發(fā)中的集成不是集中的。第二,缺乏用于開發(fā)有粒度的安全性(granular security)的標準易用過程。在J2EE系統(tǒng)中,容器提供了方法級的安全性以及基于角色的訪問控制,這對許多情況來說是不夠的??傮w來說,安全性開發(fā)的低級別使得安全性實現(xiàn)僵硬且與應用緊密耦合。
Java認證與授權服務(JAAS)是一種Java包,其使得服務能夠認證用戶和對用戶強加訪問控制。換言之,JAAS是可用于以下兩個目的的一組Java應用程序接口(API)(1)用于用戶的認證,以可靠且安全地判定當前是誰在執(zhí)行Java代碼,而無論代碼是作為應用、小應用程序(applet)、bean還是小服務程序(servlet)運行;以及(2)用于用戶授權,以判定被認證用戶是否被允許訪問資源(其可以為Java代碼或由Java代碼訪問的某對象/實體),而無論代碼是作為應用、小應用程序、bean還是小服務程序運行。典型地,JAAS認證以可插接的方式執(zhí)行。這允許Java應用保持對底層認證技術的獨立性。另外,可在不需要對應用本身進行修改的情況下,插接新的或更新后的技術。
Java使用三種類型的防御機制字節(jié)碼檢驗器、類加載器以及安全性管理器。在Java1.0版本中,小應用程序在“沙箱”(sandbox)中運行,這限制了小應用程序對它們在其上執(zhí)行的機器產生影響或從其獲取任何敏感信息的能力。因此,不能本地訪問任何較多的東西。在Java的較新版本中,小應用程序被允許脫離沙箱,如果運行其的機器基于簽名信息允許其這樣做的話。為了支持靈活的、細粒度的訪問控制,Java1.2版本提供了基于策略的安全性體系結構。該策略由一組用于不同位置的并由不同簽名者簽名的代碼的許可(permission)來定義。許可允許訪問某個資源上的某些動作。通常,在策略文件中列舉資源名以及它們相關的動作。圖1示出了Java中典型的策略文件。
在Java2版本中,較早時候由SecurityManager提供的兩個功能-即安全性策略的建立和安全性策略的實施-被分開。java.secuiry.Policy抽象類用于建立安全性策略,而Accesscontroller用作安全性實施器。為了向后兼容,SecurityManager類仍舊存在,但它引用AccessController來做出其決策。在java.policy中,許可與代碼源(code-source)相關聯(lián)。因此,其不具有基于用戶或角色的許可。圖2示出了用于使用AccessController保護Java方法的典型代碼。圖2所示的示例顯示了如何通過在訪問資源前調用AccessController來保護資源。AccessController使用應用的當前授權策略來檢查所請求的許可。如果策略文件中定義的任何許可暗含了所請求的許可,則方法“checkPermission”命令簡單地返回;否則,發(fā)起AccessControlException。
如上面所提到的,JAAS是一組使服務能夠對用戶進行認證并強加訪問控制的API。JAAS可靠且安全地判定當前是誰在執(zhí)行Java代碼以及其是否被允許這樣做。另外,JAAS實現(xiàn)了標準可插接認證模塊(PAM)框架的Java技術版本。這允許Java應用保持對底層認證機制的獨立性。
JAAS包括兩個主要組件認證與授權。JAAS將基于主題(subject)的策略添加到Java2版本的安全性模型中。不僅基于CodeSource而且基于執(zhí)行代碼的用戶授予許可。為此,首先對用戶進行認證。JAAS分發(fā)版包含各種LoginModule實現(xiàn),以便從用戶獲取用戶id和口令。LoginContext使用登錄配置文件來判定使用哪個LoginModule進行認證。Subject類用于封裝被認證用戶的憑證(credential)。一主題可具有多個稱為主體(principal)的身份。在JAAS策略文件中,每個授予聲明(grant statement)與一主體相關聯(lián)。對于每個與主題相關聯(lián)的主體,AccessController從PolicyFile獲取許可,并檢查任何許可是否暗含著被請求的許可。否則,AccessController啟動AccessControlException。圖3示出了在JAAS中用于基于主體的授權的典型策略。
在J2EE體系結構中,容器用作其所容納的組件與它們的調用者之間的授權界限。容器建立起調用代碼的用戶的標識。對被調用組件—EJB(可從美國加利福尼亞州圣塔克拉拉的Sun Microsystems公司獲得的Enterprise JavaBeansTM)或web組件—的訪問是通過將調用者的安全性屬性與訪問被調用組件所需的那些安全性屬性進行比較來判定的。在聲明性(declarative)授權中,部署者(deployer)為J2EE應用建立容器實施的訪問控制規(guī)則。部署者將應用許可模型—其典型地由應用組合者(application assembler)提供—映射到特定于運行時環(huán)境的機制。部署描述器(deployment descriptor)定義安全性角色及其關聯(lián)的對各種組件的訪問權限。部署者向特定調用者分配安全性角色,以便在運行時環(huán)境中建立用戶的訪問權限。例如,部署者可將安全性角色映射到操作環(huán)境中主體身份的列表。于是,向以這些身份之一認證的調用者分配由該角色代表的特權。J2EE容器在向組件發(fā)出方法調用之前做出訪問控制決策。因此,聲明性訪問控制可以方法的粒度被指定。
J2EE容器不在這些訪問決策中計入組件的邏輯或狀態(tài)。為了實現(xiàn)這一點,需要由代碼開發(fā)者進行編程性授權。組件可使用兩種方法來進行細粒度訪問控制EJBContext.isCallerInRole(用于EJB組件)和HttpServletRequest.isUserInRole(用于web組件)。組件使用這些方法判定調用者是否已被授予由該組件基于調用參數(shù)、組件內部狀態(tài)或例如運行時參數(shù)等其他因素選擇的特權。然而,存在著在聲明性與編程性授權之間的權衡。聲明性授權是由部署者配置的外部訪問控制策略,而編程性授權是通過由組件開發(fā)者嵌入在應用中的內部策略進行的。內部策略粒度更細,而外部策略更為靈活。另外,外部策略是透明的,而內部策略是掩藏在應用中的。例如,為了提供“雇員僅可訪問他們自己的薪酬信息”的授權策略,需要編程性的授權,其不能在未來進行改變(如果需要的話)。
另外,JAAS建立在預先存在的Java安全性模型之上,該安全性模型為基于CodeSource的且為純文本格式的策略文件實現(xiàn)。JAAS基于由某個組件訪問的類實現(xiàn)授權。然而,這對企業(yè)應用來說可能是不夠的,通過企業(yè)應用,人們可能希望使用定制的安全性儲存庫(security repository),例如帶有JAAS的LDAP(輕量型目錄訪問協(xié)議)。另外,在企業(yè)間的電子商務中,定價合同可能具有與其他合同不同的訪問控制策略。用于自助式拍賣應用的規(guī)格說明(specification)可能具有“任何注冊用戶可創(chuàng)建拍賣但只有創(chuàng)建該拍賣的用戶被允許對之進行修改”的要求。因此,要求許多Java應用對JAAS進行擴展以便滿足其授權要求。由于JAAS的可插接特征,人們可編寫其自己的多種認證和授權子模塊實現(xiàn),以便改變JAAS的默認行為。對于上述示例中示出的授權要求,人們可能需要改變以下一項或多項的默認實現(xiàn)·java.security.PermissionAccessController.checkPermission(Permission perm)被調用,以便判定調用者是否具有在被調用的CodeSource上執(zhí)行動作的授權。許可對象perm表示對資源的所要求的訪問。許可對象可指定例如許可名稱(其可指示要求在其上的訪問的資源)、資源為之被訪問的動作等等。許可類實現(xiàn)一暗含的方法,該方法將由AccessController調用,以便判定被授予的許可是否暗含著所請求的許可。為了實現(xiàn)類實例級的授權,需要具有新的許可實現(xiàn),其具有作為其字段之一的對象實例。該對象可用在所述暗含的方法中,以決定授杈。
·java.security.PermissionCollection這一抽象類用于表示許可對象的集合(collection)。這一類可被實現(xiàn)為具有存儲被授予的許可以及將它們與所請求的許可進行比較以便判定任何所授予的許可是否暗含了所請求的許可的所希望的方式。
·java.security.Policy這是用于存儲Java應用環(huán)境中的安全性策略的抽象類。AccessController接觸策略實現(xiàn),以便為被認證主題獲取CodeSource上的許可。策略對象查閱其策略規(guī)格說明,并返回適當?shù)摹⒘信e被允許的許可的PermissionCollection對象。默認地,sun.security.provider.PolicyFile實現(xiàn)用于策略實現(xiàn)。通過擁有不同的實現(xiàn),可以改變策略被編寫的方式(例如,LDAP或軟件應用)或者授權所依賴的附加參數(shù)。
·javax.security.auth.spi.LoginModuleLoginModule描述由認證提供器實現(xiàn)的接口。它從回調(callback)中檢索用戶名和口令,所述回調默認地執(zhí)行某些用戶交互。LoginModule可被擴展為將認證委托給某個外部適配器。
·java.security.PrincipalPrincipal接口表示這樣的抽象概念,其用于表示實體,例如個人、組織、組或登錄id。Group、KerberosPrincipal等等是Principal的公知的實現(xiàn)。通過對Principal進行擴展,可以添加將用于授權的定制屬性。
然而,JAAS的一個限制在于其不支持類實例級的授權,也就是說,JAAS中的授權是在類名的基礎上執(zhí)行的,而不是在類的特定實例的基礎上執(zhí)行的。例如,用于基于web的自助式拍賣應用的規(guī)格說明可具有以下要求“任何注冊(認證)用戶可創(chuàng)建拍賣但只有創(chuàng)建該拍賣的用戶可對之進行修改”。這意味著任何用戶可執(zhí)行被編寫為創(chuàng)建拍賣類實例的代碼,但只有擁有該實例的用戶可執(zhí)行被設計為對之進行修改的代碼。通常,創(chuàng)建拍賣實例的用戶將是擁有者。這意味著,相同角色的人基于他們的屬性或他們在過去執(zhí)行的動作可能具有不同的訪問權限。不幸的是,使用JAAS不能支持這種類型的授權。
JAAS授權擴展了使用安全性策略指定向執(zhí)行代碼授予何種訪問權限的現(xiàn)有Java安全性體系結構。如Java2版本平臺所提供的這種安全性體系結構是以代碼為中心的。也就是說,基于代碼特性—即代碼來自哪里、代碼是否被數(shù)字簽名以及如果被數(shù)字簽名的話被誰數(shù)字簽名—授予許可。使用JAAS到Java2SDK(軟件開發(fā)套件)的集成,java.security.Policy API處理基于主體的查詢,且默認的策略實現(xiàn)支持基于主體的授予條目。因此,訪問控制現(xiàn)在可基于哪一代碼正在運行以及誰在運行該代碼。
JAAS確實提供了支持實例級JAAS的機制。這是通過對JAAS使用的某些類進行擴展實現(xiàn)的。然而,這種方法的主要缺點在于其不可擴展且在不同域中的不同類型的授權將被提供的情況下需要創(chuàng)建新授權類以及大量再加工。支持實例級授權的另一種選擇是使用被編碼為應用的一部分的定制授權代碼。通常,這是支持授權技術的最常用方法,且其主要缺點在于不是基于標準的,這使得它難以適用于不同的應用。另外,由于代碼是應用的一部分,它難以維護,并且由于它是非一般(non-generic)的,它通常不能在不同域中被重用。
因此,由于傳統(tǒng)方法的缺點和限制,需要更加廣泛適用的基于JAAS的授權解決方案,該解決方案可應用于不同的域而不需要任何新代碼。為新的授權要求編寫新代碼使得難以在部署時改變授權設置。因此,所需要的是具有編程性授權的高粒度的聲明性授權的靈活性。
發(fā)明內容
鑒于上述情況,本發(fā)明的實施例提供了為訪問由任何軟件對象與應用表示的資源、數(shù)據(jù)或代碼的用戶建立安全性和授權策略的方法,其中,該方法包括從數(shù)據(jù)處理器上運行的應用對象描述文檔產生至少一個應用對象組;為各個應用對象組創(chuàng)建授權策略;向訪問控制器發(fā)送所選擇的應用對象;以及在部署軟件應用時,基于授權策略,為試圖訪問所選擇應用對象的用戶建立訪問控制參數(shù)。在所述產生步驟中,應用對象描述文檔包含可擴展標記語言(XML)格式。該方法還包括為授權策略指定環(huán)境變量,以及通過修改環(huán)境變量的聲明性規(guī)格說明以及修改在應用對象的屬性上定義的約束來更改授權策略。另外,該方法還包括使用以下各項指定應用對象組與應用對象相關聯(lián)的任何方法和字段參數(shù)(且在這些方法和字段參數(shù)上定義約束);所有應用對象組之間的預定關系;或者將應用對象描述文檔解析(parse)到所述至少一個應用對象組中的預定分組動作。另外,該方法還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
本發(fā)明的另一實施例提供了一種控制對軟件應用的訪問的方法,其中,該方法包括根據(jù)分組參數(shù)將軟件應用中的應用對象分組;為訪問應用對象的各類用戶建立用戶配置文件(user profile);指定包含用于每一被分組的應用對象的訪問控制參數(shù)的授權策略;以及在部署軟件應用時,將授權策略與用于試圖訪問被選擇的分組應用對象的用戶的用戶配置文件相匹配,其中,在所述分組步驟中,軟件應用包含應用對象描述文檔,該文檔包含應用對象,其中,應用對象描述文檔包含XML格式。該方法還包括為授權策略指定環(huán)境變量,以及通過改變環(huán)境變量的聲明性規(guī)格說明以及分組約束更改授權策略。在所述分組步驟中,分組參數(shù)包含使用以下各項指定應用對象與應用對象相關聯(lián)的任何方法和字段參數(shù);軟件應用中所有應用對象之間的預定關系;或者將由軟件應用/對象所表示的資源、數(shù)據(jù)或代碼解析到所述至少一個應用對象組中的預定分組動作。該方法還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
本發(fā)明的另一方面提供了一種用于為訪問軟件應用的用戶建立安全性和授權策略的系統(tǒng),其中,該系統(tǒng)包含用于由運行在數(shù)據(jù)處理器上的應用對象描述文檔產生至少一個應用對象組的裝置;用于為各個應用對象組指定授權策略的裝置;用于向訪問控制器發(fā)送所選擇的應用對象組的裝置;以及用于基于授權策略在部署軟件應用時為試圖訪問所選擇應用對象組的用戶建立訪問控制參數(shù)的裝置。
本發(fā)明的另一實施例提供了一種用于控制對軟件對象的訪問的系統(tǒng),其中,該系統(tǒng)包含應用對象描述文檔,該文檔包含至少一個應用對象組;授權策略分類器,其適用于為各個應用對象組指定授權策略;以及訪問控制器,其適用于在部署軟件對象時基于授權策略為試圖訪問所選擇應用對象組的用戶建立訪問控制參數(shù),其中,應用對象描述文檔包含XML格式,且其中,授權策略包含環(huán)境變量。該系統(tǒng)還包含生成器例程,該例程適用于通過修改環(huán)境變量和分組規(guī)則的聲明性規(guī)格說明來改變授權策略。根據(jù)該系統(tǒng),使用以下各項來指定應用對象組與用戶選擇的應用對象相關聯(lián)的任何方法和字段參數(shù);所有應用對象組之間的預定關系;或者將應用對象描述文檔解析到所述至少一個應用對象組中的預定分組動作。另外,授權策略分類器適用于實現(xiàn)不同類別的授權策略。
另外,本發(fā)明另一方面提供了計算機可讀的一種程序存儲設備,其有形地體現(xiàn)了一種可由計算機執(zhí)行以完成為訪問軟件應用的用戶建立安全性與授權策略的方法的指令程序,其中,該方法包括由數(shù)據(jù)處理器上運行的應用對象描述文檔產生至少一個應用對象組;為各個應用對象組指定授權策略;向訪問控制器發(fā)送所選擇的應用對象組;以及基于授權策略,在部署軟件應用時為試圖訪問所選擇應用對象組的用戶建立訪問控制參數(shù)。
本發(fā)明的實施例所提供的授權技術提供了在不編寫任何新代碼的情況下滿足授權要求的方法,其中,可通過改變聲明性設置在部署時獲得新的授權方案(authorization scenario)。另外,本發(fā)明的實施例提供了以下技術用XML格式表示不同的授權要求;使用對象約束邏輯為授權目的解析和產生對象組;添加環(huán)境變量作為授權參數(shù);定義被認證主體之間的關系;使用同一授權策略提供器實現(xiàn)不同類別的授權策略;以及在部署時對動作進行分組。
本發(fā)明的實施例的這些以及其他方面在結合下面的說明書和附圖考慮時可更好地理解。然而,應當理解,盡管下面的說明示出了本發(fā)明的優(yōu)選實施例及其大量具體細節(jié),其僅作為例示而不是限定給出。
參照附圖,通過閱讀下面的詳細介紹,可以更好地理解本發(fā)明的實施例,在附圖中圖1為用于Java的典型策略文件;圖2為用于使用AccessController保護Java方法的典型代碼;圖3為用于JAAS中基于主體的授權的典型策略;圖4為根據(jù)本發(fā)明實施例用于使用GenericPermission保護方法的偽代碼;圖5為根據(jù)本發(fā)明實施例在一般(generic)授權中的授權策略;圖6為示出了本發(fā)明一實施例的優(yōu)選方法的流程圖;圖7(a)為示出了本發(fā)明另一實施例的優(yōu)選方法的流程圖;圖7(b)為示出了本發(fā)明另一方面的優(yōu)選方法的流程圖;圖8為根據(jù)本發(fā)明一實施例的系統(tǒng)框圖;以及圖9為根據(jù)本發(fā)明一實施例的計算機系統(tǒng)圖。
具體實施例方式
參照在附圖中示出并在下面的介紹中詳細描述的非限制性實施例更為全面地闡釋了本發(fā)明的實施例及其各種特征與有利細節(jié)。應當注意,附圖中所示的特征不一定是按比例繪制的。為了避免不必要地模糊本發(fā)明的實施例,省略了對公知組件和處理技術的介紹。這里所用的實例僅為了有助于理解可實踐本發(fā)明的實施例的方式并進一步使本領域技術人員能夠實踐本發(fā)明的實施例。因此,這些實例不應被理解為限制本發(fā)明的實施例的范圍。
如上所述,仍然需要更為廣泛地適用的基于Java的軟件應用開發(fā)技術,該技術可應用于不同的域,而不需要對授權設置的重大改變。本發(fā)明的實施例通過向基于JAAS標準的Java應用提供一般的、低級別的可擴展安全性滿足這種需求?,F(xiàn)在參照附圖、特別是圖4至9,其中示出了本發(fā)明的優(yōu)選實施例。
如上所述,可以用不同的方式對JAAS進行擴展,以便達到各種認證和授權目標。然而,對于各種擴展,人們可能需要編寫代碼來相應地實現(xiàn)或擴展各種JAAS接口和類。因此,這使得難以在部署應用時改變安全性設置。因此,本發(fā)明的實施例所提供的一般授權技術通過在保持編程性授權的高粒度的同時使用聲明性授權獲得了這種靈活性。
因此,本發(fā)明的實施例所提供的授權技術使用聲明性規(guī)格說明提供了編程性授權的能力。具體而言,本發(fā)明的實施例對JAAS進行擴展,使得授權要求可以用聲明性方式而不是以編程性方式得到滿足。需要使用認證和授權保護的各個方法以對GenericPermission對象的構造器的調用開始,該對象具有至少三個屬性該方法所屬于的類;該方法想要執(zhí)行的動作;以及該方法在其上被調用的對象。圖4示出了根據(jù)本發(fā)明的上述方面用于使用GenericPermission保護方法的偽代碼。
如圖5所示,授權策略可以用XML格式表示。例如,如圖5所示地編寫一種用于“任何注冊用戶可創(chuàng)建拍賣但僅創(chuàng)建該拍賣的用戶被允許對之進行修改”的授權策略。類似地,在對于不同的定價合同具有不同的授權策略的情況下,許可基于{idname=“getContractID”,idtype=“method”,idvalue=“ibm-sun”)參數(shù)。
對于一般授權,為合適的授權策略提供器配置JDK。這是通過在Java_home/jre/lib/security目錄下的Java.security文件中改變/添加auth.policy.provider實現(xiàn)的,其中,Java_home為系統(tǒng)中安裝Java的路徑。即使存在著對于多個應用—每個應用具有自身的授權要求—只能有一個授權策略提供器的限制,由于一般授權覆蓋了大量的授權策略,其可以在同一機器上運行,而不必為每個應用編寫單獨的代碼。
圖6示出了為訪問用軟件對象/應用代表的資源、數(shù)據(jù)或代碼的用戶建立安全性與授權策略的方法,其中,該方法包括由運行在數(shù)據(jù)處理器上的應用對象描述文檔,產生(101)至少一個應用對象組;為各個應用對象創(chuàng)建(103)授權策略;將用戶選擇的應用對象發(fā)送(105)到系統(tǒng)200的訪問控制器208(在圖8中示出);以及在部署軟件應用時基于授權策略為試圖訪問被選擇應用對象組的用戶建立(107)訪問控制參數(shù)。在產生步驟(101)中,應用對象描述文檔包含XML格式。該方法還包括為授權策略指定環(huán)境變量以及通過修改環(huán)境變量的聲明性規(guī)格說明來改變授權策略。另外,該方法還包括使用以下各項指定應用對象組與所選擇應用對象相關聯(lián)的任何方法和字段參數(shù);所有應用對象組之間的預定關系;或將應用對象描述文檔解析到所述至少一個應用對象組中的預定分組動作。另外,該方法還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
本發(fā)明的另一實施例如圖7(a)所示,其示出了一種控制對由軟件對象/應用代表的資源、數(shù)據(jù)或代碼的訪問的方法,其中,該方法包括根據(jù)分組參數(shù)將軟件應用中的應用對象分組(111),所述分組參數(shù)包含對象方法調用結果、對象字段值以及環(huán)境變量中的一個或多個;為訪問應用對象的每一類用戶建立(113)用戶配置文件;指定(115)包含用于每一被分組的應用對象的訪問控制參數(shù)的授權策略;以及在部署軟件應用時,將授權策略與用于試圖訪問被選擇分組應用對象的用戶的用戶配置文件相匹配(117),其中,在分組(111)步驟中,軟件應用包含應用對象描述文檔,該文檔包含應用對象,其中,應用對象描述文檔包含XML格式。
另外,在分組(111)步驟中,分組參數(shù)包含使用以下各項指定應用對象與應用對象相關聯(lián)的任何方法和字段參數(shù);軟件應用中所有應用對象之間的預定關系;或將用戶選擇的軟件對象解析到所述至少一個應用對象組中的預定分組動作。如圖7(b)所示,該方法還包括為授權策略指定(119)環(huán)境變量;以及通過修改環(huán)境變量的聲明性規(guī)格說明改變(121)授權策略。該方法還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
根據(jù)編寫授權策略的方法,本發(fā)明的實施例允許訪問某些與安全性相關的環(huán)境變量,從而策略可依賴于這些變量。這使得有可能具有這樣的策略,例如“允許A在工作日訪問的軟件應用但在周末則不允許”。
圖8示出了用于控制對軟件應用的訪問的系統(tǒng)200,其中,系統(tǒng)200包含應用對象描述文檔202,該文檔包含至少一個應用對象組204;授權策略分類器206,其適用于為各個應用對象組204指定授權策略;以及訪問控制器208,其適用于在部署軟件應用時基于授權策略為試圖訪問所選擇應用對象組204的用戶210建立訪問控制參數(shù),其中,應用對象描述文檔202包含XML格式,且其中,授權策略包含環(huán)境變量。
該系統(tǒng)還包含生成器例程212,該例程適用于通過修改環(huán)境變量的聲明性規(guī)格說明來改變授權策略。根據(jù)系統(tǒng)200,使用以下各項來指定應用對象組204與應用對象組204相關聯(lián)的任何方法和字段參數(shù);所有應用對象組204之間的預定關系;或者將應用對象描述文檔202解析到所述至少一個應用對象組204中的預定分組動作。另外,授權策略分類器206適用于實現(xiàn)不同類別的授權策略。
本發(fā)明的實施例提供了一種解析對象約束邏輯(編寫在XML文件中)以及出于授權目的產生對象組的技術。傳統(tǒng)上,在JAAS中,授權策略是在類(代碼)級別編寫的。與之相反的是,根據(jù)本發(fā)明的實施例,授權策略是以對象組的粒度編寫的。使用相關對象的方法/字段表示對象組。例如,在JAAS中,假設存在稱為“contract”(合同)的類,所有的合同將具有同樣的授權屬性,但在本發(fā)明的實施例提供的一般授權中,可允許用戶更新與“Sun”(Sun是位于美國加利福尼亞州圣塔克拉拉的SunMicrosystems公司的注冊商標)的合同,但不允許更新“Microsoft”(Microsoft是位于美國華盛頓州雷蒙德的Microsoft公司的注冊商標)的合同。在JAAS中,在應用對象上的授權不依賴于應用對象的特性。因此,所有的應用對象具有相同的授權規(guī)則。為了避免這一點,典型地以傳統(tǒng)方法進行定制授權。與此相反的是,本發(fā)明的實施例提供了允許個人使用JAAS進行實例級授權(即依賴于數(shù)據(jù)對象的特性的授權)的技術。
本發(fā)明提供的方法定義了被認證主體之間的關系。傳統(tǒng)上,在JAAS中,當用戶被認證時,用戶由“Subject”類型的對象表示。每個主題可具有與之相關聯(lián)的多個主體。這些主體表示該人可具有的不同身份。因此,一人可由其名字(這是一個主體)或其社會安全號碼(這是另一個主體)唯一地標識。然而,使用本發(fā)明的實施例提供的基于XML的表示,可定義例如“如果該用戶(被認證主體)是對象所有者的管理者(這里,該對象可以是關于請假申請的),那么允許他調用批準方法”的策略。再次地,由于本發(fā)明的實施例提供了允許個人使用JAAS進行實例級授權(即依賴于數(shù)據(jù)對象的特性的授權)的技術,這是有利的。進一步地,這是以聲明性方式進行的,其與編程性授權相比更為靈活。另外,使用這種設置,對象之間的動態(tài)關系可被用于授權目的。在該示例中,策略是根據(jù)被認證主體之間的關系(管理者)定義的。
接著,本發(fā)明的實施例提供了一種方法,通過該方法,可使用同一授權策略提供器實現(xiàn)不同類別的授權策略。在java_home/jre/lib/security目錄下的java.security文件中配置授權提供器。對于Java虛擬機(JVM),通過改變java.security文件的屬性auth.policy.provider對之進行配置。即使存在著只能有一個授權策略提供器的限制,由于一般授權覆蓋了大量的授權策略,多個應用—各個應用具有自身的授權要求—可以在同一JVM上運行。由于本發(fā)明的實施例具有單個XML授權文件,該文件可對于不同的應用具有不同授權規(guī)則。將根據(jù)特定于該應用的應用對象定義每個授權規(guī)則。另外,授權基礎結構將使用該單個授權文件。因此,可使用同一授權策略提供器實現(xiàn)不同類別的授權策略。
本發(fā)明的實施例還提供了在部署時對動作進行分組的方法??蓪幼鬟M行分組,以便為不同組的動作提供不同的授權要求。在部署時,可以決定同一授權將被用于例如“讀取”和“搜索”動作。這一點在授權策略被存儲在授權XML文件中時實現(xiàn)。在部署時,通過簡單地改變XML,可實現(xiàn)上述動作分組。
接著,本發(fā)明的實施例提供了一種在不必編寫任何新代碼的情況下滿足授權要求的方法。在部署時,通過改變聲明性設置,可獲得新的授權方案。這是如上所述簡單地通過地改變XML實現(xiàn)的。因此,本發(fā)明的實施例提供了新的策略,其不需要對代碼進行改變。由于授權要求以XML表示而不是將之與應用相集成,可通過簡單地改變XML(而不是代碼改變)來改變授權設置。在本發(fā)明的實施例提供的、基于XML的策略文件中,如果用戶主體具有用某個“類似于Javabean”的方法—例如getOwner、getManager等—的返回值表示的某些特性,則它被許可訪問某個Java對象。
本發(fā)明的實施例還包含一種以XML格式表示不同授權要求的方法。該格式包括使用在Java對象上的某些字段或方法調用指定對象,使用關系指定主體,以及對動作進行分類。本發(fā)明的實施例還以XML格式表示例如時間、日等環(huán)境變量,并在這些變量上定義授權策略。這一點特別有利,因為通過包括若干方法來以XML格式標識對象,本發(fā)明的實施例可產生用于授權設置的大量選項。這些選項包括Java對象的字段值和方法返回值、主體及其之間的關系、以及環(huán)境變量等等。因此,本發(fā)明的實施例可在部署時改變授權策略,其可利用JAAS標準。換言之,通過在不利用編程性授權情況下的實例級的授權,可獲得JAAS的優(yōu)點。
另外,本發(fā)明的實施例提供了一般許可類,其具有允許傳遞將在其上檢查授權的對象和/或做出訪問請求的對象的構造器。傳統(tǒng)上,在JAAS中,需要Permission對象以便使用訪問控制器對許可進行檢查。與之相反的是,根據(jù)本發(fā)明的實施例所提供的方法,使用GenericPermission對Permission類進行擴展,從而在其上要求許可的對象是被傳送到訪問控制器208的Permission對象的參數(shù)。因此,訪問控制器208可基于被傳送到它的對象對授權作出決策。該方面用于基于將在其上做出授權決策的應用對象的特定實例的特性提供授權規(guī)則。如上所述,在JAAS中,授權策略獨立于應用對象的實例,且策略對于同一類別的應用對象的所有實例來說是相同的。通過使用利用將對象實例作為參數(shù)的一般許可類的上述技術,本發(fā)明的實施例可提供實例級的授權。
接著,本發(fā)明的實施例提供了一般策略文件,其允許使用環(huán)境變量,允許使用反射(reflection)的動態(tài)方法調用的表示,允許表達式(expression)、謂詞邏輯(predicated logic)的表示等等。例如,本發(fā)明的實施例提供了編寫授權要求的格式。該格式包括使用Java對象上的某字段或方法調用指定對象、使用關系指定主體、以及對動作進行分組。本發(fā)明的實施例還以XML格式表示例如時間、日等環(huán)境變量,并在這些變量上定義授權策略。
另外,本發(fā)明的實施例提供了一種Policy File實現(xiàn),其解析一般策略文件,理解Generic Policy File的語法,并基于過去的用戶Object、用戶Principal/用戶Subject以及用戶代碼從Generic Policy File創(chuàng)建GenericPermissionCollection。這是通過使用新類型的GenericPermission類實現(xiàn)的,由此,使用不同類型的策略文件實現(xiàn)。因此,本發(fā)明的實施例理解Generic Policy File的一般格式,但不必理解在該策略文件中指定的對象約束邏輯。然而,這種實現(xiàn)使用該策略文件創(chuàng)建GenericPermission類。因此,如上所述,GenericPermission類理解在策略文件中指定的對象約束邏輯。
因此,本發(fā)明的實施例使用GenericPermission類,該類使用策略文件,理解策略語言的聲明性規(guī)格說明,并能夠得到環(huán)境變量的值,對表達式以及謂詞邏輯(predicate logic)求值,以及使用Java反射來獲取運行時參數(shù)值。換言之,本發(fā)明的實施例理解在基于XML的一般策略文件中編寫的邏輯。
另外,本發(fā)明的實施例提供GenericPermission Collection類,其存儲GenericPermission的集合,并調用GenericPermission的暗含方法,其能夠理解Generic Policy File。一般地,本發(fā)明的實施例定義了將對象作為參數(shù)之一的許可的一般集合,其在JAAS環(huán)境中根據(jù)JAAS規(guī)范工作。具體而言,本發(fā)明的實施例提供了基于Java的策略,該策略提供XML格式定義的訪問控制或授權。以XML格式聲明性地指定環(huán)境變量,以便定義用于Java的授權策略的授權參數(shù)。XML是獨立于應用的,且聲明性變量的使用通過以XML定義類、方法和對象的Java參數(shù)而允許一般授權。以XML描述幾種不同的策略,且這些策略被聲明為環(huán)境變量。為了改變授權策略,對環(huán)境變量的聲明進行修改。另外,各應用可具有不同的策略,并可在用戶使用特定的用戶名與口令登錄時用XML格式聲明性地進行指定。
圖9示出了用于實踐本發(fā)明的實施例的代表性硬件環(huán)境。該原理圖示出了根據(jù)本發(fā)明的實施例的信息處理/計算機系統(tǒng)的硬件配置。該系統(tǒng)包括至少一個處理器或中央處理單元(CPU)10。CPU10經(jīng)由系統(tǒng)總線12互連到各種設備,例如隨機存取存儲器(RAM)14、只讀存儲器(ROM)16以及輸入/輸出(I/O)適配器18。I/O適配器18可連接到外圍設備,例如盤單元11和磁帶驅動器13,或可由系統(tǒng)讀取的其他程序存儲設備。系統(tǒng)可讀取程序存儲設備上的本發(fā)明的指令,并遵循這些指令以執(zhí)行本發(fā)明的實施例的方法。系統(tǒng)還包含用戶接口適配器19,其將鍵盤15、鼠標17、揚聲器24、麥克風22和/或例如觸摸屏設備(未示出)等其他用戶接口設備連接到總線12,以便收集用戶輸入。另外,通信適配器20將總線12連接到數(shù)據(jù)處理網(wǎng)絡25,而顯示適配器21將總線12連接到顯示設備23,該顯示設備23可體現(xiàn)為例如監(jiān)視器、打印機或發(fā)射器等輸出設備。
本發(fā)明的實施例所提供的授權技術提供了一種在不編寫任何新代碼的情況下滿足授權要求的方法,其中,可在部署時通過改變聲明性設置獲取新的授權方案。另外,本發(fā)明的實施例提供了以下技術以XML格式表示不同的授權要求;出于授權目的,使用對象約束邏輯解析和產生對象組;添加環(huán)境變量作為授權參數(shù);定義被認證主體之間的關系;使用同一授權策略提供器實現(xiàn)不同類別的授權策略;以及在部署時對動作進行分組。本發(fā)明的實施例可用于J2EE/非J2EE環(huán)境中的所有Java應用。另外,這里介紹的環(huán)境適用于所有J2EE/非J2EE應用。
權利要求
1.一種為訪問由任何軟件對象和應用表示的資源、數(shù)據(jù)或代碼的用戶建立安全性與授權策略的方法,所述方法包括從運行在數(shù)據(jù)處理器上的應用對象描述文檔產生至少一個應用對象組;為每一所述應用對象組創(chuàng)建授權策略;將被選擇的應用對象組發(fā)送到訪問控制器;以及基于所述授權策略,在部署軟件應用時為試圖訪問所述選擇的應用對象的用戶建立訪問控制參數(shù)。
2.根據(jù)權利要求1的方法,其中,在所述產生步驟中,所述應用對象描述文檔包括可擴展標記語言(XML)格式。
3.根據(jù)權利要求1的方法,還包括為所述授權策略指定環(huán)境變量。
4.根據(jù)權利要求3的方法,還包括通過修改所述環(huán)境變量的聲明性規(guī)格說明以及修改在應用對象的屬性上定義的約束,改變所述授權策略。
5.根據(jù)權利要求1的方法,還包括使用與所述應用對象組相關聯(lián)的方法與字段參數(shù)中的任何一個指定所述應用對象組。
6.根據(jù)權利要求1的方法,還包括使用所有應用對象組中的預定關系,指定所述應用對象組。
7.根據(jù)權利要求1的方法,還包括使用將所述應用對象描述文檔解析到所述至少一個應用對象組中的預定分組動作,指定所述應用對象組。
8.根據(jù)權利要求1的方法,還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
9.一種控制對軟件應用的訪問的方法,所述方法包括根據(jù)分組參數(shù)對所述軟件應用中的應用對象進行分組;為訪問所述應用對象的各類用戶建立用戶配置文件;指定包含用于每一所述分組的應用對象的訪問控制參數(shù)的授權策略;以及在部署所述軟件應用時,為試圖訪問所選擇分組應用對象的用戶將所述授權策略與所述用戶配置文件相匹配。
10.根據(jù)權利要求9的方法,其中,在所述分組步驟中,所述軟件應用包含應用對象描述文檔,該文檔包含所述應用對象,其中,所述應用對象描述文檔包含可擴展標記語言(XML)格式。
11.根據(jù)權利要求9的方法,還包括為所述授權策略指定環(huán)境變量。
12.根據(jù)權利要求11的方法,還包括通過修改所述環(huán)境變量的聲明性規(guī)格說明以及修改在所述應用對象的屬性上定義的約束,改變所述授權策略。
13.根據(jù)權利要求9的方法,其中,在所述分組步驟中,所述分組參數(shù)包括使用與所述應用對象相關聯(lián)的方法與字段參數(shù)中的任何一個指定所述應用對象。
14.根據(jù)權利要求9的方法,其中,在所述分組步驟中,所述分組參數(shù)包括使用所述軟件應用中的所有應用對象中的預定關系,指定所述應用對象。
15.根據(jù)權利要求9的方法,其中,在所述分組步驟中,所述分組參數(shù)包括使用將所述軟件應用解析到所述至少一個應用對象組中的預定分組動作,指定所述應用對象。
16.根據(jù)權利要求9的方法,還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
17.一種用于為訪問軟件應用的用戶建立安全性和授權策略的系統(tǒng),所述系統(tǒng)包含用于從運行在數(shù)據(jù)處理器上的應用對象描述文檔產生至少一個應用對象組的裝置;用于為每一所述應用對象組指定授權策略的裝置;用于向訪問控制器發(fā)送所選擇的應用對象組的裝置;以及用于基于所述授權策略,在部署所述軟件應用時,為試圖訪問所述選擇的應用對象組的用戶建立訪問控制參數(shù)的裝置。
18.一種用于控制對軟件對象的訪問的系統(tǒng),所述系統(tǒng)包含應用對象描述文檔,該文檔包含至少一個應用對象組;授權策略分類器,其適用于為每一所述應用對象組指定授權策略;以及訪問控制器,其適用于在部署所述軟件對象時,基于所述授權策略,為試圖訪問所選擇應用對象組的用戶建立訪問控制參數(shù)。
19.根據(jù)權利要求18的系統(tǒng),其中,所述應用對象描述文檔包含可擴展標記語言(XML)格式。
20.根據(jù)權利要求18的系統(tǒng),其中,所述授權策略包含環(huán)境變量。
21.根據(jù)權利要求20的系統(tǒng),還包含生成器例程,該例程適用于通過修改所述環(huán)境變量的聲明性規(guī)格說明以及通過修改在應用對象的屬性上定義的約束來改變所述授權策略。
22.根據(jù)權利要求18的系統(tǒng),其中,使用與所述應用對象組相關聯(lián)的方法與字段參數(shù)中的任何一個指定所述應用對象組。
23.根據(jù)權利要求18的系統(tǒng),其中,使用所有應用對象組中的預定關系,指定所述應用對象組。
24.根據(jù)權利要求18的系統(tǒng),其中,使用將所述應用對象描述文檔解析到所述至少一個應用對象組中的預定分組動作,指定所述應用對象組。
25.根據(jù)權利要求18的系統(tǒng),其中,所述授權策略分類器適用于實現(xiàn)不同類別的授權策略。
26.一種計算機可讀的程序存儲設備,其有形地體現(xiàn)了一種可由所述計算機執(zhí)行以完成為訪問軟件應用的用戶建立安全性與授權策略的方法的指令程序,所述方法包括從運行在數(shù)據(jù)處理器上的應用對象描述文檔產生至少一個應用對象組;為每一所述應用對象組指定授權策略;將被選擇的應用對象組發(fā)送到訪問控制器;以及基于所述授權策略,在部署所述軟件應用時為試圖訪問所述選擇的應用對象組的用戶建立訪問控制參數(shù)。
27.根據(jù)權利要求26的程序存儲設備,其中,在所述產生步驟中,所述應用對象描述文檔包括可擴展標記語言(XML)格式。
28.根據(jù)權利要求26的程序存儲設備,其中,所述方法還包括為所述授權策略指定環(huán)境變量。
29.根據(jù)權利要求28的程序存儲設備,其中,所述方法還包括通過修改所述環(huán)境變量的聲明性規(guī)格說明以及通過修改在應用對象的屬性上定義的約束,改變所述授權策略。
30.根據(jù)權利要求26的程序存儲設備,其中,所述方法還包括使用與所述應用對象組相關聯(lián)的方法與字段參數(shù)中的任何一個指定所述應用對象組。
31.根據(jù)權利要求26的程序存儲設備,其中,所述方法還包括使用所有應用對象組中的預定關系,指定所述應用對象組。
32.根據(jù)權利要求26的程序存儲設備,其中,所述方法還包括使用將所述應用對象描述文檔解析到所述至少一個應用對象組中的預定分組動作,指定所述應用對象組。
33.根據(jù)權利要求26的程序存儲設備,其中,所述方法還包括使用同一授權策略分類器實現(xiàn)不同類別的授權策略。
全文摘要
一種用于為訪問軟件應用的用戶建立安全性和授權策略的方法、系統(tǒng)和程序存儲設備,其中,該方法包括從運行在數(shù)據(jù)處理器上的、包含XML格式的應用對象描述文檔產生至少一個應用對象組;為每個應用對象創(chuàng)建授權策略;向訪問控制器發(fā)送被選擇的應用對象組;以及基于授權策略在部署軟件應用時為試圖訪問所選擇的應用對象組的用戶建立訪問控制參數(shù)。該方法還包括為授權策略指定環(huán)境變量;通過修改環(huán)境變量的聲明性規(guī)格說明以及修改在應用對象的屬性上定義的約束來改變授權策略;使用同一授權策略分類器實現(xiàn)不同類別的授權策略;以及使用分組參數(shù)指定應用對象組。
文檔編號G06F1/00GK1989472SQ200580025145
公開日2007年6月27日 申請日期2005年7月13日 優(yōu)先權日2004年7月30日
發(fā)明者M·比德, R·古普塔 申請人:國際商業(yè)機器公司