《電子技術應用》
您所在的位置:首頁 > 其他 > 业界动态 > 基于JAAS实现分布式仿真应用的安全

基于JAAS实现分布式仿真应用的安全

2008-12-22
作者:闫波,吕艳琴

1? 引言
??? 在國內目前的技術條件下,新一代仿真系統(tǒng)" title="仿真系統(tǒng)">仿真系統(tǒng)的研制中,基于HLA協(xié)議或者DIS/HLA結合,實現(xiàn)多武器平臺聯(lián)動、諸軍兵種協(xié)調、海陸空聯(lián)合演練的復雜大系統(tǒng),將是對目前軍用仿真技術的一個挑戰(zhàn)。復雜大系統(tǒng)的仿真,其各個仿真器節(jié)點地理分布上的大跨度決定了仿真支撐平臺是一個基于網絡的分布式平臺。對于一個涉及多種異構平臺、包含成百上千仿真實體的分布式仿真系統(tǒng)來說,仿真模型及其動態(tài)數(shù)據的管理,是分布式仿真支撐平臺的基本功能。
??? 基于CORBA、JAVA中間層的RTI參考標準數(shù)據服務功能的概念設計和實現(xiàn)技術是核心研究內容之一,它是連接前端用戶與后臺分布式實時數(shù)據庫的紐帶。目前,分布式應用主要有以下幾種標準, Com、Corba 和J2EE是三種最主要的標準,中間層的實現(xiàn)基本上是基于以上三種標準。Com/Dcom: 由微軟開發(fā)基于COM的一個分布式對象技術,它是微軟全部商業(yè)應用的基礎。DCOM也是一個BUS構架的,對于COM對象可以即插即用,DCOM模型最適合于Windows/Windows NT環(huán)境。但缺點是局限于Windows 的產品系列;CORBA(Common Object Request Broker Architecture):一項由OMG(對象管理組織)所開發(fā)的技術,表示公共對象請求代理體系結構,核心的思想是對象BUS的概念,它允許對象即插即用。CORBA 中IIOP可以跨語言,跨廠商進行操作,在CORBA中面向對象僅僅限制為通過引用傳遞的對象或者在整體框架中預定義。它主要包括三個部分:接口定義語言(IDL),對象請求代理(ORB),ORB間的互操作協(xié)議IIOP。CORBA是基于對象管理體系結構的,OMA為創(chuàng)建分布式應用程序" title="應用程序">應用程序定義了廣泛的體系結構。Corba標準能夠跨平臺,但由于各Unix廠商對Corba執(zhí)行得不夠徹底,互聯(lián)比較困難; Sun公司發(fā)起的J2EE是現(xiàn)在市場上的主流產品。J2EE標準是過去幾年中形成的一個與廠家無關的公共標準,它將許多分散的Java技術整合到一起,組合成一個完整的企業(yè)標準。因此考慮到分布式仿真應用" title="仿真應用">仿真應用實際情況,如分布性、異構平臺等特點,要保證應用的伸縮性、靈活性和高可用性,綜合DCOM、CORBA和J2EE的特性,在這里我們選擇J2EE作為分布式仿真應用中間層的實現(xiàn)標準。由于分布式節(jié)點實現(xiàn)透明訪問的特性,則系統(tǒng)的安全體系至關重要,在這里使用JAAS結合系統(tǒng)本身的特點實現(xiàn)用戶登錄認證和授權訪問。下圖是分布式仿真應用的總體結構圖。

2 J2EE和JAAS
2.1? J2EE框架
?? ?J2EE是一種利用JAVA2平臺來簡化諸多與多級企業(yè)解決方案的開發(fā)、部署和管理相關的復雜問題的體系結構。J2EE不但鞏固了J2SE中許多優(yōu)點,如“編寫一次,到處運行”的特性、方便存取數(shù)據庫的JDBC API、CORBA技術以及能夠在Internet應用中保護數(shù)據的安全模式等,還提供了對EJB,SERVLET,JSP和XML的支持。J2EE使用EJB SERVER作為商業(yè)組件的部署環(huán)境,并且還提供了支持高可用性和高性能的集群技術、失敗的自動轉移和恢復、應用負載均衡等。J2EE技術提供了一種基于組件的方法來設計、開發(fā)、裝配和部署應用程序。J2EE服務器以容器的形式為每一個組件類型提供底層服務。容器設置定制了由J2EE服務器提供的底層支持,這包括諸如安全性、事務管理、Java命名目錄接口(JNDI)等。JAAS是JAVA 認證和授權服務,是J2EE內嵌的功能。JAAS API 是為用戶認證和授權而設計的一套JAVA包。它實現(xiàn)了標準可插入認證模塊PAM的JAVA版本,還相應的擴展了Java2平臺的訪問控制結構來支持授權。
2.2? JAAS技術
JAVA認證和授權服務(JAAS)是J2EE開發(fā)包1.3版本的擴展,和1.4版本的一部分。Java 2 平臺為訪問各種可用的身份識別的方法提供了最為全面一套接口。 Java 平臺更為和各種身份認證" title="身份認證">身份認證系統(tǒng)的交互提供了一個服務接口,即 Java 身份認證和授權服務 (JAAS) API。用這個接口,作為服務供應商能夠執(zhí)行高安全性的身份認證,并允許 JAAS 為希望使用哪種身份認證方法的應用程序提供通用接口。可以直接利用J2EE本身提供的JAAS安全服務來保證服務器的安全。Java認證和授權服務JAAS為J2EE應用程序提供了一個方法以為一個特定的用戶或一組用戶進行認證和授權。JAAS是標準的可插入認證模塊PAM結構的Java版本,它對Java 2平臺的安全認證框架進行了擴展以支持基于用戶的安全認證。JAAS是Java 認證和授權服務。簡單的說,認證實際上就是確認用戶的身份,而授權是給特定的用戶合適的訪問權限,使其不越權訪問。JAAS API 是為用戶認證和授權而設計的一套JAVA包。它實現(xiàn)了標準可插入認證模塊PAM的JAVA版本,還相應的擴展了JAVA2平臺的訪問控制結構來支持授權。
3? 基于JASS設計實現(xiàn)用戶認證和授權服務
??? 當某個用戶要訪問后臺的分布式企業(yè)應用時,應用程序首先驗證用戶的身份,通過了用戶身份認證之后,然后查看用戶是否有對于應用程序的具體模塊具有訪問權限。
3.1? 身份驗證
??? Login.config作為配置文件,仿真系統(tǒng)使用Login.config文件來指定每個登錄模塊的認證項。Login.config 文件包含 LoginContext 構造器中引用的文本字符串和登錄過程列表。幾個參數(shù)用于指定一個給定的登錄過程的成功或失敗對總體認證過程的影響。有如下參數(shù):
·?required 表示登錄模塊必須成功。即使它不成功,還將調用其它登錄模塊。
·?optional 表示登錄模塊可以失敗,但如果另一個登錄模塊成功,總體登錄仍可以成功。如果所有登錄模塊都是可選的,那么要使整個認證成功至少必須有一個模塊是成功的。
·?requisite 表示登錄模塊必須成功,而且如果它失敗,將不調用其它登錄模塊。
·?sufficient 表示如果登錄模塊成功,則總體登錄將成功,同時假設沒有其它必需或必不可少的登錄模塊失敗。
應用程序調入登錄環(huán)境LoginContext, LoginContext 是一種用于設置登錄過程的 Java 類,它進行實際的登錄,如果登錄成功,獲取 Subject。LoginContext將參考Login.config的配置來進行實際的登錄認證。它有如下四種主要方法:
·?構造器loginContext()。它把 login.config 文件中使用的字符串作為其第一個參數(shù),把執(zhí)行實際任務的回調" title="回調">回調處理程序作為其第二個參數(shù)。
·?login(),它根據 login.config文件中指定的規(guī)范實際登錄。
·?getSubject(),如果登錄總體成功,它返回經認證的 Subject。
·?logout(),它向 LoginContext注銷 Subject。
每個登錄模塊以不同的方式認證用戶,傳統(tǒng)的基于口令的登錄模塊要求輸入用戶名和密碼;智能卡登錄模塊要求用戶插卡并驗證PIN;生物型的登錄模塊要求輸入用戶名并且驗證用戶的指紋。針對應用程序的安全需求,系統(tǒng)管理員可以在一個應用程序中插入多個登錄模塊,實現(xiàn)多層的認證。登錄模塊主要有以下方法提供登錄管理:
·?initialize( subject,callbackHandler, ,) 初始化登錄模塊。
·?login() 設置任何必需的回調,調用 CallbackHandler 來處理它們,并將返回的信息(即用戶名和密碼)與允許值進行比較。如果匹配,則登錄模塊成功,盡管仍可能因為另一個登錄模塊不成功而異常終止它,這取決于 login.config 文件中的設置。
·?commit() 作為兩階段提交過程的一部分被調用以確定是否成功。如果根據 login.config 文件中指定的約束,所有登錄模塊都是成功的,那么新的 Principal 隨同用戶名一起創(chuàng)建,并被添加到 Subject 的主體集。
·?abort(),如果總體登錄未成功,則調用它;如果發(fā)生異常終止,必須清除內部的登錄模塊狀態(tài)。
·?logout() 被調用以除去 Subject 的主體集中的 Principal 并執(zhí)行其它內部狀態(tài)清除。
用戶按照Login.config配置中規(guī)定的順序被登錄模塊認證。一般的,不管前一個登錄模塊是否登陸成功,用戶繼續(xù)被堆棧里的登錄模塊認證。只有當所有必需的登錄模塊成功后,LoginContext才會返回一個認證成功標識給應用程序。LoginContext用兩個階段來執(zhí)行這個步驟。兩個階段都必須成功完成,LoginContext才能返回標識總體認證成功的狀態(tài)。
這兩個階段包括:
(1)LoginContext調用每個配置過的登錄模塊,并且指引它驗證主題的身份,如果所有的登錄模塊成功通過這個階段,LoginContex就進入第二個階段。
(2)LoginContext再次調用每個配置過的登錄模塊,指引它正式的執(zhí)行認證。在此階段,每個登錄模塊都會將主題與相關的含有用戶名和主題的證件的主體聯(lián)系起來。
JAAS登錄使用回調處理程序來獲取用戶的認證信息。CallbackHandler 是在 LoginContext 對象的構造函數(shù)中指定的?;卣{處理程序使用幾個提示來獲取用戶的用戶名和密碼信息。從登錄模塊調用的處理程序的handle()方法將Callback數(shù)組對象作為其參數(shù)。在登錄期間,處理程序遍歷Callback數(shù)組。handle()方法檢查Callback對象的類型并執(zhí)行適當?shù)挠脩舨僮鳌oginContext通過允許應用程序規(guī)定Callback來解決這個問題,它底層的登錄模塊可以與用戶相互作用。應用程序提供一個CallbackHander給Login Context,這樣LoginContext可以直接把它傳遞給每個登錄模塊。所以每個登錄模塊可以調用Callback來收集或顯示相關信息。
現(xiàn)在假設登陸模塊LoginM1和LonginM2,且這兩個登陸模塊都要求必須成功,則登陸流程如下:

3.2 授權訪問
??? 如果該用戶已經通過系統(tǒng)認證,則系統(tǒng)產生一個JAAS Subject 。要實現(xiàn)用戶對方法級的訪問則要通過安全攔截器的檢查,在系統(tǒng)中我們使用角色與一個用戶集合關聯(lián),角色被映射到特定的Subject或者特定的用戶組,當角色被映射到一個Subject時,特殊的角色敏感的操作所涉及到的Subject名與從角色中提取的Subject名進行比較以決定操作是否允許執(zhí)行。當角色被映射到一個組時,與一個特殊的角色敏感操作所涉及到的Subject相關的組與從角色中提取的組進行比較以決定操作是否允許執(zhí)行。這種基于角色的訪問控制要求維護一個角色列表并建立從角色到用戶或者用戶組的映射。
??? 以下是系統(tǒng)授權的一些基本步驟:
??? 第一步:從EJB容器獲得允許訪問EJB方法的角色名,角色名是有包含調用方法的方法允許元素中的ejb-jar.xml描述器角色名元素決定的。
??? 第二步:如果沒有指定角色,或者方法在exclude-list元素中指定,那么訪問該方法就被否決了。否則,安全攔截器就調用JaasSecurityManager.doesUserHaveRole()方法來查看調用者是否有指定的一個角色名。DoesUserHaveRole方法重申了角色名并檢查認證過的用戶的角色群是否包含指定的用戶名的簡單主體.如果有任何一個角色名在角色群中,訪問就被允許。否則,就否決。
??? 第三步:如果EJB配置了專業(yè)的安全策略,調用方法就傳遞給安全策略。如果安全策略想否決調用者的訪問,將生成一個java.lang.SecurityException。如果沒有java.lang.SecurityException生成,訪問EJB方法將被允許,而且方法調用將被送到下一個容器攔截器進行相關的處理。

??? 假設安全域名為SecurityDomain,則授權流程如下:

?

4 結論
??? JAVA的JAAS技術結合分布式仿真應用的要求,實現(xiàn)了系統(tǒng)的安全體系,只有通過JAAS的認證和授權,用戶才能夠安全的訪問后臺分布式數(shù)據庫或文件系統(tǒng)以及相對應的業(yè)務邏輯操作。

參考文獻
1.Scott Stark and The Jboss Group.Jboss Administration And Development[M]. Jboss Administration And?? Development Second Edition,2002
2.Li Gong.Inside Java 2 Platform Security :Architecture ,Api design,and Implementation[M].Sun Microsystem,Inc,1999
3.Brad Rubin.Java Authentication and Authorization Service[DB/OL]. http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/java-onlinecourse-bytitle/021011
4. 謝楊. J2EE核心技術[N].計算機世界網, 2002-6-26

?

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關內容