认证授权
--> 認證與授權
? ? ?認證是用戶或計算設備用來驗證身份的過程。授權是根據(jù)請求用戶的身份允許訪問和操作一段敏感軟件的過程。這兩個概念密不可分。沒有授權,就無需知道用戶的身份。沒能認證,就不可能區(qū)分可信和不可信用戶,更不可能安全地授權訪問許多系統(tǒng)部分。
不一定要標識或認證個別實體;在某些情況下,可以通過分組,對給定組中的所有實體授予某種權限來進行認證。在某些情況下,個別認證是系統(tǒng)安全性必不可少的環(huán)節(jié)。
認證與授權的另一個有趣方面是,一個實體在系統(tǒng)中可以有幾個角色。例如,用戶可以同時是公司職工(表示他需要對公司的電子郵件有訪問權)和該公司的會計師(表示他需要對公司財務系統(tǒng)有訪問權)。
--> 認證元素
認證基于以下一個或多個元素:
- 您知道什么。該類別包括個別人知道而其它人一般不知道的信息。示例包括?PIN、密碼和個人信息(如母親的婚前姓)。
- 您有些什么。該類別包括使個人能夠訪問資源的物理項。示例包括?ATM?卡、Secure ID?令牌和信用卡。
- 您是誰。該類別包括如指紋、視網(wǎng)膜剖面和面部照片等生物測定信息。
通常,對于授權只使用一種類別是不夠的。例如,ATM?卡通常與?PIN?結合在一起使用。即使物理卡丟失,用戶和系統(tǒng)也能夠安然無恙,因為小偷還必須知道PIN?才能訪問任何資源。
授權元素
有兩種控制訪問敏感代碼的基本方法:
- 聲明性授權可以由系統(tǒng)管理員執(zhí)行,他配置系統(tǒng)的訪問權(即,聲明誰可以訪問系統(tǒng)中的哪些應用程序)。通過聲明性授權,可以添加、更改或取消用戶訪問特權,而不影響底層應用程序代碼。
- 程序性授權使用?Java?應用程序代碼來做授權決定。當授權決定需要更復雜的邏輯和決定(超出了聲明性授權的能力范圍)時,程序性授權是必需的。因為程序性授權被構建到應用程序代碼中,所以更改程序性授權時要求重寫應用程序的部分代碼。
您將在本教程中學習聲明性和程序性授權技術。
保護用戶和代碼
根據(jù)用戶在代碼中的可信度,Java?平臺允許對計算資源(如磁盤文件和網(wǎng)絡連接)進行細顆粒度的訪問控制。Java?平臺的大多數(shù)基本安全性特性都是為保護用戶免受潛在的惡意代碼破壞而設計的。例如,第三方證書支持的數(shù)字簽名代碼確保代碼來源的身份。根據(jù)用戶對代碼來源的了解,他可以選擇授予或拒絕對該代碼的執(zhí)行權。同樣,用戶可以根據(jù)給定代碼來源的下載?URL?授予或拒絕訪問權。
基于?Java?的系統(tǒng)上的訪問控制是通過策略文件實現(xiàn)的,該文件包含的語句如下:
grant signedBy "Brad", codeBase "http://www.bradrubin.com" {
permission java.io.FilePermission "/tmp/abc", "read";
};
該語句允許由“Brad”簽署并從?http://www.bradrubin.com?裝入的代碼讀取?/tmp/abc目錄。
其它?Java?平臺特性(如缺少指針)進一步保護用戶免受潛在的惡意代碼破壞。JAAS?的認證和授權服務一起工作,提供了補充功能:它們防止敏感的?Java?應用程序代碼遭到潛在的惡意用戶破壞。
可插入認證模塊
JAAS?實現(xiàn)“可插入認證模塊(Pluggable Authentication Module(PAM))”框架的?Java?版本。Sun Microsystems?為其?Solaris?操作系統(tǒng)創(chuàng)建了?PAM;通過?JAAS,現(xiàn)在可以以獨立于平臺的形式使用?PAM。
PAM?的主要用途是允許應用程序開發(fā)人員在開發(fā)時寫入標準認證接口,并將使用哪些認證技術(以及如何使用它們)的決策留給系統(tǒng)管理員。認證技術是在登錄模塊中實現(xiàn)的,這些登錄模塊是在編寫了應用程序之后部署的,并且在稱為登錄配置文件(本教程中名為?login.config)的文本文件中指定。login.config?文件不僅可以指定要調用哪些模塊,而且還可以指定總體認證成功的條件。
PAM?使新的認證技術或技巧能更方便地添加到現(xiàn)有應用程序中。同樣,可以通過更新?login.config?文件來更改認證策略,而不是重寫整個應用程序。
- JDK 1.4?是與下列?PAM?模塊一起提供的。稍后,我們將在本教程中使用其中一個模塊,并還要練習編寫我們自己的兩個模塊:
| ? | ? |
JAAS?示例和圖
在本教程中,我們將逐一研究?JAAS?示例應用程序的代碼。為了對總體情況有所了解,下圖顯示了所有這些代碼是如何組合在一起的。正在運行的示例(主程序JAASExample)先使用兩種技術(即兩個登錄模塊)來認證用戶,然后根據(jù)認證步驟的結果允許或禁止(或授權)訪問兩段敏感代碼。
下面是?JAASExample?程序的圖。下一頁將描述操作流。
?附件:?您所在的用戶組無法下載或查看附件
JAASExample?操作流
下面是由?JAASExample?圖說明的總體認證與授權流的簡要描述。以下每個步驟將在本教程的其它地方進行更為詳細的描述。
我們從認證的第一步開始,就是要創(chuàng)建登錄環(huán)境并試圖登錄。LoginContext是一個?Java?類,它使用?login.config?文件中的信息來決定要調用哪些登錄模塊以及將使用什么標準來確定是否成功。對本示例,有兩個登錄模塊。第一個登錄模塊是AlwaysLoginModule,它不需要密碼,所以它總是成功的(這是不切實際的,但它足以說明?JAAS?是如何工作的)。該模塊用關鍵字required標記,表示它是成功所必需的(它總是成功)。第二個登錄模塊是PasswordLoginModule,它需要密碼,但該模塊的成功與否是可選的,因為它用關鍵字optional標記。這表示即使PasswordLoginModule失敗,但總體登錄仍可成功。
初始化之后,選擇的登錄模塊經(jīng)歷由LoginContext控制的兩階段提交過程。作為該過程的一部分,調用UsernamePasswordCallbackHandler以獲取個人(用Subject對象表示)的用戶名和密碼。如果認證成功,則Principal被添加到Subject中。Subject可以有許多Principal(在該示例中,是“Brad”和“joeuser”),每個Principal都授予用戶對系統(tǒng)的不同級別的訪問權。這樣就完成了認證步驟。
一旦認證完成,通過使用程序認證技術和doAs方法,用Subject來嘗試執(zhí)行一些敏感的工資單操作代碼。JAAS?檢查是否授予Subject訪問權。如果Subject有一個授權訪問工資單代碼的Principal,那么允許繼續(xù)執(zhí)行。否則,將拒絕執(zhí)行。
接下來,我們嘗試使用聲明性授權技術和doAsPrivilaged方法來執(zhí)行一些敏感的職員信息操作代碼。這次,JAAS?部署用戶定義的特權(PersonnelPermission)、Java?策略文件(jaas.policy)和?Java?訪問控制器(AccessController)用來決定是否可以繼續(xù)執(zhí)行。
總結
- 上一篇: 移动应用开发过程中的迭代式原型设计
- 下一篇: Highcharts在IE中不能一次性正