當前位置:編程學習大全網 - 源碼下載 - 什麽是JAAS和靈活的Java安全?

什麽是JAAS和靈活的Java安全?

Java認證授權服務(Java authentic ation and Authorization Service,JAAS,Java authentic ation and Authorization API)提供了壹種靈活的、可伸縮的機制來保證Java程序在客戶端或服務器端運行。Java的早期安全框架強調通過驗證代碼的來源和作者來保護用戶免受下載代碼的侵害。JAAS強調通過驗證誰在運行代碼和他/她的權限來保護系統免受用戶的攻擊。它允許您集成壹些標準的安全機制,如Solaris NIS(網絡信息服務)、Windows NT、LDAP(輕量級目錄訪問協議)、Kerberos等。以通用和可配置的方式集成到系統中。

妳曾經需要為壹個應用程序實現壹個登錄模塊嗎?如果妳是壹個有經驗的程序員,我相信妳做過很多次這種工作,而且每次都不完全壹樣。妳可以在Oracle數據庫的基礎上構建妳的登錄模塊,或者使用NT用戶認證,或者使用LDAP目錄。如果有壹種方法可以在不改變應用級代碼的情況下支持上面提到的所有安全機制,那對於程序員來說壹定是壹件幸運的事情。

現在妳可以使用JAAS來實現上述目標。JAAS是壹個相對較新的Java API。在J2SE 1.3,是擴展包;它成為了J2SE 1.4的核心包。在本文中,我們將介紹JAAS的壹些核心概念,然後通過實例說明如何將JAAS應用到實際程序中。本文中的例子改編自我們的壹個基於Web的Java應用程序。在這個例子中,我們使用壹個關系數據庫來存儲用戶的登錄信息。由於使用了JAAS,我們實現了壹個強大而靈活的登錄和認證模塊。

客戶端和服務器端的JAAS

開發人員可以將JAAS應用於客戶端和服務器端。在客戶端使用JAAS很簡單。在服務器端使用JAAS時,情況會更復雜。目前應用服務器市場上的JAAS產品並不是很壹致,使用JAAS的J2EE應用服務器也有壹些細微的差別。比如JBossSx利用自己的架構將JAAS融入更大的安全框架;雖然WebLogic 6.x也使用JAAS,但安全框架完全不同。

現在妳可以理解為什麽我們需要從客戶端和服務器的角度來看待JAAS了。後面我們會列舉兩種情況的例子。為了使服務器端的示例程序更簡單,我們使用Resin應用服務器。

核心JAAS級

在使用JAAS之前,妳需要先安裝JAAS。JAAS已被納入J2SE 1.4,但未被納入J2SE 1.3。如果妳想使用J2SE 1.3,妳可以從SUN的官方網站下載JAAS。當JAAS正確安裝後,您會在安裝目錄的lib目錄中找到jaas.jar。您需要將路徑添加到類路徑中。(註意:如果您安裝了壹個已經包含JAAS的應用服務器,請閱讀應用服務器的幫助文檔以獲得更多詳細信息)。在Java安全屬性文件java.security中,您可以更改壹些與JAAS相關的系統屬性。該文件保存在/lib/security目錄中。

在應用程序中使用JAAS身份驗證通常包括以下步驟:

1.創建LoginContext的實例。

2.為了獲取和處理驗證信息,將CallBackHandler對象作為參數傳遞給LoginContext。

3.通過調用LoginContext的login()方法進行驗證。

4.利用login()方法返回的Subject對象實現壹些特殊的功能(假設登錄成功)。

這裏有壹個簡單的例子:

log in context LC = new log in context(" my example ");

嘗試{

LC . log in();

} catch (LoginException) {

//認證失敗。

}

//認證成功,我們現在可以繼續了。

//如果我們願意,我們可以使用返回的主題。

subject sub = LC . get subject();

Subject.doAs(sub,new MyPrivilegedAction());

運行這段代碼時,以下工作是在後臺完成的。

1.初始化時,LoginContext對象首先在JAAS配置文件中查找MyExample項,然後確定要用該項的內容加載哪個LoginModule對象。

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

3.每個login()方法執行驗證操作或獲取壹個CallbackHandle對象。

4.CallbackHandle對象通過使用壹個或多個回調方法來獲取用戶輸入,從而與用戶進行交互。

5.在新的主題對象中填寫驗證信息。

我們將進壹步解釋代碼。但在此之前,讓我們看看代碼中涉及的核心JAAS類和接口。這些類別可以分為三種類型:

普通類型主題、主體、證書

請驗證LoginContext、LoginModule、CallBackHandler、Callback。

授權策略,AuthPermission,PrivateCredentialPermission

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

常見類型:Subject、Principal、voucher Subject類表示壹個認證實體,可以是用戶、管理員、Web服務、設備或其他進程。這個類包含三種類型的安全信息:標識:壹個或多個主體對象代表公共憑證;例如,公鑰的名稱或私有憑證;例如,密碼或私鑰主體對象代表主體對象的身份。它們在Subject類中實現了java.security.Principal和java.io.Serializable的接口,最重要的方法是getName()。此方法返回壹個標識名。Subject對象中有多個主體對象,因此它可以有多個名稱。因為登錄名、身份證號、郵箱都可以作為用戶的身份,可見在實際應用中擁有多個身份名稱是非常普遍的。上面說的代金券不是某個特定的階層或者借口,可以是任何對象。證書可以包含特定安全系統所需的任何身份驗證信息,如票證、密鑰或密碼。Subject對象中維護了壹組特定的私有和公共憑據,可以通過getPrivateCredentials()和getPublicCredentials()方法獲得這些憑據。這些方法通常在應用層的安全子系統中調用。驗證:LoginContext在應用層,可以使用LoginContext對象來驗證Subject對象。LoginContext對象還體現了JAAS的動態可插入性,因為當您創建LoginContext的實例時,您需要指定壹個配置。LoginContext通常從文本文件中加載配置信息,該文件告訴LoginContext對象在登錄時使用哪個LoginModule對象。下面列出了LoginContext: login()中用於登錄操作的三種常用方法。此方法激活配置中指定的所有LoginModule對象。如果成功,它將創建壹個經過驗證的Subject對象;否則,拋出LoginException異常。GetSubject()返回已驗證的主體對象logout()註銷主體對象,刪除相關的主體對象和憑證驗證:LoginModule LoginModule是調用特定驗證機制的接口。J2EE 1.4包含以下LoginModule的實現類:JndiLoginModule用於驗證在JNDI配置的目錄服務Krb5LoginModule。ntLoginModul使用Kerberos協議,使用NT中當前用戶的用戶信息來驗證UnixLoginMod。Ule使用Unix中當前用戶的用戶信息進行驗證。與上述模塊壹起,還有相應的Principal接口的實現類,如NTDomainPrincipal和UnixPrincipal。這些類位於com.sun.security.auth包中。LoginModule接口有五個方法:創建LoginModule實例時,構造函數會調用initialize()來驗證login()。當LgoninContext對象接受所有LoginModule對象返回的結果時,將調用commit()。該方法將主體對象和憑證分配給主體對象。當任何LoginModule對象驗證失敗時,Abort()調用此方法。此時沒有與主題對象相關聯的主體對象或憑證。Logout()刪除主體對象和與主體對象相關聯的憑證。在應用程序代碼中,程序員通常不會直接調用上面列出的方法,而是通過LigonContext間接調用這些方法。認證:CallbackHandler和回調CallbackHandler和回調對象使LoginModule對象能夠從系統和用戶收集必要的認證信息,同時在收集信息時獨立於實際的交互過程。JAAS在javax.sevurity.auth.callback包中包含7個回調實現類和2個CallbackHandler實現類:ChoiceCallback、ConfirmationCallback、LogcaleCallback、NameCallback、PasswordCallback、TextInputCallback、TextOutputCallback、DialogCallbackHandler和TextCallBackHandler。回調接口將只在客戶端使用。

  • 上一篇:Lotus網站源代碼
  • 下一篇:ps海報什麽創建格式?如何用ps制作海報
  • copyright 2024編程學習大全網