JAAS介紹

JAAS介紹

1、JAAS是什麼?

JAAS---Java Authentication Authorization Service(JAAS,Java驗證和授權服務)。

2、JAAS背景

從早期所謂的 Java 沙箱到 JDK 1.4 引入的健壯的、全功能的安全體系結構,安全性一直是 Java 平臺的基本組件。從那時到現在,Java 語言的設計者收到了來自團體的大量關於安全的 Java 應用程序(或者企業環境)可以做什麼和不做什麼的意見,他們自己也添加了若干技巧。

可以說隨着 J2EE Web 應用程序安全體系結構的引入,我們不斷從近 10 年的反覆試驗有所收穫,事實也表明了這一點。J2EE 安全框架由三個 API 組成:Java 認證和授權服務(JAAS)、Java 安全套接字擴展(JSSE)和 Java 加密擴展(Java Cryptography Extension,JCE)。雖然 JCE 是一個有意思和重要的 API,但是它與我們所關注的安全 Web 應用程序開發的“三大項”――認證、授權和傳輸――並不特別相關。所以在本月的專欄中我們將集中講述 JAAS 和 JSSE。

  • Java早期的安全框架強調的是通過驗證代碼的來源和作者,保護用戶避免受到下載下來的代碼的攻擊。
  • JAAS強調的是通過驗證誰在運行代碼以及他/她的權限來保護系統面受用戶的攻擊。它讓你能夠將一些標準的安全機制,例如Solaris NIS(網絡信息服務)、Windows NT、LDAP(輕量目錄存取協議),Kerberos等通過一種通用的,可配置的方式集成到系統中。

3、JAAS目標

JAAS 提供了一種靈活的、說明性的機制,用於對用戶進行認證並驗證他們訪問安全資源的能力。JSSE 定義了通過安全套接字層(SSL)進行安全 Web 通信的一種全 Java 的機制。通過結合這兩種技術,可以使我們的應用程序:

  • 驗證用戶就是他或者她所宣稱的那個人(認證)。
  • 保證允許他或者她訪問所要求的資源(授權)。
  • 通過安全網絡連接進行完整的信息交換(傳輸)。

現在,我們來看每一個基礎的功能組件。

4、JAAS的核心類

  • 公用類

Subject,Principal,Credential

  • 驗證類和接口

LoginContext,LoginModule,CallbackHandler,Callback

  • 授權類

Policy,AuthPermission,PrivateCredentialPermission

javax.security.auth.Subject是核心類,它表示和一個實體(例如一個人)有關一系列的相關信息,包含此實體的Principal,公開Credential以及私有Credential。


Subject

要授權訪問資源,應用必須首先驗證請求的來源。JAAS框架使用單詞subject來表示請求的來源。Subject類代表了一個驗證實體,它可以是用戶、管理員、Web服務,設備或者其他的過程。該類包含了三中類型的安全信息:

  1. 身份(Identities):由一個或多個Principal對象表示。
  2. 公共憑證(Public credentials):例如名稱或公共祕鑰。
  3. 私有憑證(Private credentials):例如口令或私有密鑰。

Principals

Principal對象代表了Subject對象的身份。它是一個惟一的實體,比如個人或者組的名字、帳號、社會安全號或者類似的惟一標識。爲了惟一標識一個 subject(這是認證的關鍵部分),一個或者多個 principal 必須與這個subject 相關聯。

它們實現了java.security.Principal和java.io.Serializable接口。在Subject類中,最重要的方法是getName()。該方法返回一個身份名稱。在Subject對象中包含了多個Principal對象,因此它可以擁有多個名稱。由於登錄名稱、身份證號和Email地址都可以作爲用戶的身份標識,可見擁有多個身份名稱的情況在實際應用中是非常普遍的情況。

Credential

在上面提到的憑證並不是一個特定的類或藉口,一個 subject 可能擁有安全相關的屬性,稱爲憑證(credential)。憑證可以是從簡單的密碼到複雜的加密密鑰的任何東西。它可以是任何對象。憑證中可以包含任何特定安全系統需要的驗證信息,例如標籤(ticket),密鑰或口令。Subject對象中維護着一組特定的私有和公有的憑證,這些憑證可以通過getPrivateCredentials()和getPublicCredentials()方法獲得。這些方法通常在應用程序層中的安全子系統被調用。

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());

在運行這段代碼時,後臺進行了以下的工作。

  1. 當初始化時,LoginContext對象首先在JAAS配置文件中找到MyExample項,然後更具該項的內容決定該加載哪個LoginModule對象(參見圖二)。

  2. 在登錄時,LoginContext對象調用每個LoginModule對象的login()方法。

  3. 每個login()方法進行驗證操作或獲得一個CallbackHandle對象。

  4. CallbackHandle對象通過使用一個或多個CallBack方法同用戶進行交互,獲得用戶輸入。

  5. 向一個新的Subject對象中填入驗證信息。

  我們將對代碼作進一步的解釋。但是在這之前,讓我們先看代碼中涉及到的核心JAAS類和接口。這些類可以被分爲三種類型:

  普通類型 Subject,Principal,憑證

  驗證 LoginContext,LoginModule,CallBackHandler,Callback

  授權 Policy,AuthPermission,PrivateCredentialPermission

  上面列舉的類和接口大多數都在javax.security.auth包中。在J2SE 1.4中,還有一些接口的實現類在com.sun.security.auth包中。

6、總結

JAAS的優點:

  1. Java驗證和授權API)提供了靈活和可伸縮的機制來保證客戶端或服務器端的Java程序。Java早期的安全框架強調的是通過驗證代碼的來源和作者,保護用戶避免受到下載下來的代碼的攻擊。JAAS強調的是通過驗證誰在運行代碼以及他/她的權限來保護系統免受用戶的攻擊。它讓你能夠將一些標準的安全機制,例如Solaris NIS(網絡信息服務)、Windows NT、LDAP(輕量目錄存取協議),Kerberos等通過一種通用的,可配置的方式集成到系統中。

  2. 傳統的軟件在實現身份認證功能過程中,往往自行開發專用的認證模塊。由於不同的軟件開發人員在信息安全方面水平參差不齊,實現的認證模塊安全性往往得不到保證。認證和授權應當同業務邏緝分離一個通用的身份認證模塊不僅能減輕軟件開發人員的負擔,更能保證認證的強度,確保在當認證方式發生改變時,應用程序不受影響。

  3. 可以基於JAAS建立擁有自有技術的單點登錄解決方案。

Java 平臺以其岩石般堅固的安全性聞名。每一年 Java 安全性框架都會變得更靈活和更健壯,JAAS 和 JSSE 的加入表明這個傳統將會繼續發揚光大。

參考鏈接:
1、介紹下這幾天研究的JAAS:http://blog.csdn.net/abigfrog/article/details/4567231
2、用 JAAS 和 JSSE 實現 Java 安全性:http://www.ibm.com/developerworks/cn/java/j-pj2ee9/
3、JAAS:靈活的Java安全機制:http://oss.org.cn/ossdocs/java/j2ee/jaas.html
4、JAAS是什麼?http://hi.baidu.com/guanlin84/item/f780e445668cd82310ee1ea4



發佈了52 篇原創文章 · 獲贊 3 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章