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