JAAS介绍
JAAS介紹
1、JAAS是什么?
JAAS---Java Authentication Authorization Service(JAAS,Java驗(yàn)證和授權(quán)服務(wù))。
2、JAAS背景
從早期所謂的 Java 沙箱到 JDK 1.4 引入的健壯的、全功能的安全體系結(jié)構(gòu),安全性一直是 Java 平臺(tái)的基本組件。從那時(shí)到現(xiàn)在,Java 語(yǔ)言的設(shè)計(jì)者收到了來(lái)自團(tuán)體的大量關(guān)于安全的 Java 應(yīng)用程序(或者企業(yè)環(huán)境)可以做什么和不做什么的意見,他們自己也添加了若干技巧。
可以說隨著 J2EE Web 應(yīng)用程序安全體系結(jié)構(gòu)的引入,我們不斷從近 10 年的反復(fù)試驗(yàn)有所收獲,事實(shí)也表明了這一點(diǎn)。J2EE 安全框架由三個(gè) API 組成:Java 認(rèn)證和授權(quán)服務(wù)(JAAS)、Java 安全套接字?jǐn)U展(JSSE)和 Java 加密擴(kuò)展(Java Cryptography Extension,JCE)。雖然 JCE 是一個(gè)有意思和重要的 API,但是它與我們所關(guān)注的安全 Web 應(yīng)用程序開發(fā)的“三大項(xiàng)”――認(rèn)證、授權(quán)和傳輸――并不特別相關(guān)。所以在本月的專欄中我們將集中講述 JAAS 和 JSSE。
- Java早期的安全框架強(qiáng)調(diào)的是通過驗(yàn)證代碼的來(lái)源和作者,保護(hù)用戶避免受到下載下來(lái)的代碼的攻擊。
- JAAS強(qiáng)調(diào)的是通過驗(yàn)證誰(shuí)在運(yùn)行代碼以及他/她的權(quán)限來(lái)保護(hù)系統(tǒng)面受用戶的攻擊。它讓你能夠?qū)⒁恍?biāo)準(zhǔn)的安全機(jī)制,例如Solaris NIS(網(wǎng)絡(luò)信息服務(wù))、Windows NT、LDAP(輕量目錄存取協(xié)議),Kerberos等通過一種通用的,可配置的方式集成到系統(tǒng)中。
3、JAAS目標(biāo)
JAAS 提供了一種靈活的、說明性的機(jī)制,用于對(duì)用戶進(jìn)行認(rèn)證并驗(yàn)證他們?cè)L問安全資源的能力。JSSE 定義了通過安全套接字層(SSL)進(jìn)行安全 Web 通信的一種全 Java 的機(jī)制。通過結(jié)合這兩種技術(shù),可以使我們的應(yīng)用程序:
- 驗(yàn)證用戶就是他或者她所宣稱的那個(gè)人(認(rèn)證)。
- 保證允許他或者她訪問所要求的資源(授權(quán))。
- 通過安全網(wǎng)絡(luò)連接進(jìn)行完整的信息交換(傳輸)。
現(xiàn)在,我們來(lái)看每一個(gè)基礎(chǔ)的功能組件。
4、JAAS的核心類
- 公用類
Subject,Principal,Credential
- 驗(yàn)證類和接口
LoginContext,LoginModule,CallbackHandler,Callback
- 授權(quán)類
Policy,AuthPermission,PrivateCredentialPermission
javax.security.auth.Subject是核心類,它表示和一個(gè)實(shí)體(例如一個(gè)人)有關(guān)一系列的相關(guān)信息,包含此實(shí)體的Principal,公開Credential以及私有Credential。
Subject
要授權(quán)訪問資源,應(yīng)用必須首先驗(yàn)證請(qǐng)求的來(lái)源。JAAS框架使用單詞subject來(lái)表示請(qǐng)求的來(lái)源。Subject類代表了一個(gè)驗(yàn)證實(shí)體,它可以是用戶、管理員、Web服務(wù),設(shè)備或者其他的過程。該類包含了三中類型的安全信息:
Principals
Principal對(duì)象代表了Subject對(duì)象的身份。它是一個(gè)惟一的實(shí)體,比如個(gè)人或者組的名字、帳號(hào)、社會(huì)安全號(hào)或者類似的惟一標(biāo)識(shí)。為了惟一標(biāo)識(shí)一個(gè)?subject(這是認(rèn)證的關(guān)鍵部分),一個(gè)或者多個(gè)?principal?必須與這個(gè)subject?相關(guān)聯(lián)。
它們實(shí)現(xiàn)了java.security.Principal和java.io.Serializable接口。在Subject類中,最重要的方法是getName()。該方法返回一個(gè)身份名稱。在Subject對(duì)象中包含了多個(gè)Principal對(duì)象,因此它可以擁有多個(gè)名稱。由于登錄名稱、身份證號(hào)和Email地址都可以作為用戶的身份標(biāo)識(shí),可見擁有多個(gè)身份名稱的情況在實(shí)際應(yīng)用中是非常普遍的情況。
Credential
在上面提到的憑證并不是一個(gè)特定的類或借口,一個(gè)?subject?可能擁有安全相關(guān)的屬性,稱為憑證(credential)。憑證可以是從簡(jiǎn)單的密碼到復(fù)雜的加密密鑰的任何東西。它可以是任何對(duì)象。憑證中可以包含任何特定安全系統(tǒng)需要的驗(yàn)證信息,例如標(biāo)簽(ticket),密鑰或口令。Subject對(duì)象中維護(hù)著一組特定的私有和公有的憑證,這些憑證可以通過getPrivateCredentials()和getPublicCredentials()方法獲得。這些方法通常在應(yīng)用程序?qū)又械陌踩酉到y(tǒng)被調(diào)用。
5、 例子 LoginContext lc = new LoginContext("MyExample");
try {
lc.login();
} catch (LoginException) {
//Authentication failed.
}
//Authentication successful, we can now continue.
//We can use the returned Subject if we like.
Subject sub = lc.getSubject();
Subject.doAs(sub, new MyPrivilegedAction());
在運(yùn)行這段代碼時(shí),后臺(tái)進(jìn)行了以下的工作。
1. 當(dāng)初始化時(shí),LoginContext對(duì)象首先在JAAS配置文件中找到MyExample項(xiàng),然后更具該項(xiàng)的內(nèi)容決定該加載哪個(gè)LoginModule對(duì)象(參見圖二)。
2. 在登錄時(shí),LoginContext對(duì)象調(diào)用每個(gè)LoginModule對(duì)象的login()方法。
3. 每個(gè)login()方法進(jìn)行驗(yàn)證操作或獲得一個(gè)CallbackHandle對(duì)象。
4. CallbackHandle對(duì)象通過使用一個(gè)或多個(gè)CallBack方法同用戶進(jìn)行交互,獲得用戶輸入。
5. 向一個(gè)新的Subject對(duì)象中填入驗(yàn)證信息。
我們將對(duì)代碼作進(jìn)一步的解釋。但是在這之前,讓我們先看代碼中涉及到的核心JAAS類和接口。這些類可以被分為三種類型:
普通類型 Subject,Principal,憑證
驗(yàn)證 LoginContext,LoginModule,CallBackHandler,Callback
授權(quán) Policy,AuthPermission,PrivateCredentialPermission
上面列舉的類和接口大多數(shù)都在javax.security.auth包中。在J2SE 1.4中,還有一些接口的實(shí)現(xiàn)類在com.sun.security.auth包中。
6、總結(jié)
JAAS的優(yōu)點(diǎn):
Java驗(yàn)證和授權(quán)API)提供了靈活和可伸縮的機(jī)制來(lái)保證客戶端或服務(wù)器端的Java程序。Java早期的安全框架強(qiáng)調(diào)的是通過驗(yàn)證代碼的來(lái)源和作者,保護(hù)用戶避免受到下載下來(lái)的代碼的攻擊。JAAS強(qiáng)調(diào)的是通過驗(yàn)證誰(shuí)在運(yùn)行代碼以及他/她的權(quán)限來(lái)保護(hù)系統(tǒng)免受用戶的攻擊。它讓你能夠?qū)⒁恍?biāo)準(zhǔn)的安全機(jī)制,例如Solaris NIS(網(wǎng)絡(luò)信息服務(wù))、Windows NT、LDAP(輕量目錄存取協(xié)議),Kerberos等通過一種通用的,可配置的方式集成到系統(tǒng)中。
傳統(tǒng)的軟件在實(shí)現(xiàn)身份認(rèn)證功能過程中,往往自行開發(fā)專用的認(rèn)證模塊。由于不同的軟件開發(fā)人員在信息安全方面水平參差不齊,實(shí)現(xiàn)的認(rèn)證模塊安全性往往得不到保證。認(rèn)證和授權(quán)應(yīng)當(dāng)同業(yè)務(wù)邏緝分離一個(gè)通用的身份認(rèn)證模塊不僅能減輕軟件開發(fā)人員的負(fù)擔(dān),更能保證認(rèn)證的強(qiáng)度,確保在當(dāng)認(rèn)證方式發(fā)生改變時(shí),應(yīng)用程序不受影響。
可以基于JAAS建立擁有自有技術(shù)的單點(diǎn)登錄解決方案。
Java 平臺(tái)以其巖石般堅(jiān)固的安全性聞名。每一年 Java 安全性框架都會(huì)變得更靈活和更健壯,JAAS 和 JSSE 的加入表明這個(gè)傳統(tǒng)將會(huì)繼續(xù)發(fā)揚(yáng)光大。
參考鏈接: 1、介紹下這幾天研究的JAAS:http://blog.csdn.net/abigfrog/article/details/45672312、用 JAAS 和 JSSE 實(shí)現(xiàn) Java 安全性:http://www.ibm.com/developerworks/cn/java/j-pj2ee9/ 3、JAAS:靈活的Java安全機(jī)制:http://oss.org.cn/ossdocs/java/j2ee/jaas.html 4、JAAS是什么?:http://hi.baidu.com/guanlin84/item/f780e445668cd82310ee1ea4
總結(jié)
- 上一篇: 舵机的原理和控制
- 下一篇: 俄罗斯:自由软件在这里生根