JAAS使用
簡介
Java 驗證和授權服務(Java Authentication Authorization Service,簡稱 JAAS)是 Java 在 JDK 1.4 引入的安全框架。JAAS 提供了一種靈活的、說明性機制,用于對用戶進行身份驗證和服務訪問的授權。
JAAS 是一種可插拔的認證模塊( Pluggable Authentication Module,PAM )的安全體系結構。這意味著可以通過改變模塊,支持從一種安全協議組件無縫的切換到另一個協議組件。同時這種體系架構定義的接口可以無需修改代碼實現加入多種認證技術和授權機制,因為 JAAS API 定義了應用程序代碼與實際驗證邏輯之間的抽象,這個抽象不用重新編譯現有的應用程序代碼就可以作為登錄模塊的運行時替代。這種實現方式是通過應用程序只調用 LoginContext 接口,而認證技術的實際提供程序則是基于 LoginModule 接口進行開發的,在運行時,LoginContext 通過讀取配置文件確定使用哪些認證模塊來對應用程序進行認證。
JAAS 認證中最重要的實體對象是:principal 和 subject,subject 表示一個驗證通過的主體,這個主體保存著一系列的相關信息,包含此實體的 principal,公開 Credential 以及私有 Credential。
使用
使用步驟
在應用程序中使用 JAAS 的步驟為:
簡單示例:
String applicationName="app"; LoginContext logincontext = new LoginContext(applicationName); // ① try {logincontext.login(); // ② } catch (LoginException e) {// Authentication failed. }// Authentication successful, we can now continue. // We can use the returned Subject if we like. Subject subject = logincontext.getSubject(); // ③ Subject.doAs(subject, new MyPrivilegedAction());代碼分析:
配置文件
在上面的使用過程中,可以發現 JAAS 的實際認證機制是通過配置文件來配置的,一般配置文件是保存在文本中的。文本文件中由很多配置塊構成,通常把這些配置塊稱作申請(Application)。每個申請對應了一個或多個特定的 LoginModule 對象。
在代碼中構造一個 LoginContext 對象時,需要把配置文件中申請的名稱傳遞給它,LoginContext 將會根據申請中的信息決定激活哪些 LoginModule 對象,按照什么順序激活以及使用什么規則激活。
配置文件的結構如下所示:
Application{ModuleClass Flag ModuleOptions;ModuleClass Flag ModuleOptions;... }; Application2{ModuleClass Flag ModuleOptions;... }- ModuleClass:指定使用的實際 LoginModule
 - Flag:控制當申請中包含了多個 LoginModule 時進行登錄時的行為,一般有以下幾個選項: 
- Required:最常用的選項,該選項意味著對應的 LoginModule 對象必須被調用,并且還必須要通過所有的驗證
 - Sufficient
 - Requistite
 - Optional
 
 - ModuleOption:允許有多個參數
 
簡單示例:
Sample {com.sun.security.auth.module.NTLoginModule Rquired debug=true; }示例中的申請指定了 LoginContext 對象應該使用 NTLoginModule 進行驗證,并設置了一個調試參數 debug=true,這樣診斷輸出將被輸出到 System.out 中。
配置文件可以被任意命名,并且可以被放在任何位置。JAAS 框架通過使用 java.securty.auth.long.config 屬性來確定配置文件的位置,可通過以下幾種方式設置這個屬性:
- 環境變量進行配置,客戶端代碼基本不怎么用,局限性太大了
 - 命令啟動程序,可進行參數設置屬性: java -Djava.security.auth.login.config=jass.config JAASTest
 - 代碼中設置此屬性:System.setProperty("java.security.auth.login.config","D:\xxx\jass.config");
 
本文由博客一文多發平臺 OpenWrite 發布!
總結
                            
                        - 上一篇: Vagrant 构建 Linux 开发环
 - 下一篇: ANSYS——初学路径之路径的定义、作用