Java认证与授权服务JAAS基础概念
1. 前言
JAAS是”Java Authentication and Authorization Service“的縮寫,它提供了認(rèn)證與授權(quán)的基礎(chǔ)框架與接口定義,而且提供了良好的插件化機(jī)制。本文主要探討JAAS的基礎(chǔ)概念,這些概念也是認(rèn)證與授權(quán)技術(shù)中的常用概念。
2. Subject
如果要授權(quán)訪問(wèn)一些資源,需要先對(duì)資源請(qǐng)求主體進(jìn)行認(rèn)證。JAAS框架中,使用Subject來(lái)描述這個(gè)資源請(qǐng)求主體與安全訪問(wèn)相關(guān)的信息,因此,一個(gè)Subject通常是指一個(gè)對(duì)象實(shí)體,或者一個(gè)服務(wù)。
Subject中所關(guān)聯(lián)的信息,主要涉及:
- 身份信息
- 密碼信息
- 加密密鑰/憑據(jù)信息
一個(gè)Subject可能擁有一個(gè)或多個(gè)身份,一個(gè)身份被稱之為Principal,也就是說(shuō),一個(gè)Subject可能關(guān)聯(lián)一個(gè)或多個(gè)Principals。
一個(gè)Subject可能涉及與安全有關(guān)的憑據(jù)信息(密鑰/票據(jù)),稱之為Credentials。敏感的Credentials需要特別的保護(hù)措施,例如,私有密鑰信息,被保存在一個(gè)私鑰集合中。而關(guān)于公有秘鑰信息,則被保存在另外一個(gè)公鑰集合中。
如下示例代碼給出了如何為一個(gè)Subject添加Principal以及公鑰信息:
Subject subject; Principal principal; Object credential; ? // 獲取所有的Principals列表,并且加入新的Principal。 subject.getPrincipals().add(principal); // 獲取公鑰列表信息,并加入新的公鑰列表。 subject.getPublicCredentials().add(credential);3. LoginContext
認(rèn)證上下文信息。LoginContext中提供了針對(duì)Subject對(duì)象進(jìn)行認(rèn)證的基礎(chǔ)方法,每一個(gè)LoginContext都關(guān)聯(lián)一個(gè)Context Name。LoginContext的關(guān)鍵方法如下:
- login 登錄/認(rèn)證,該過(guò)程由具體的LoginModule代理完成。
- logout 登出
- getSubject 獲取認(rèn)證之后所創(chuàng)建的Subject對(duì)象信息
初始化一個(gè)LoginContext對(duì)象時(shí),可以傳入如下一些參數(shù):
- Context Name[必選]
- Subject[可選]
- CallbackHandler[可選]
- Configuration[可選]
4. LoginModule
LoginModule提供了登錄/認(rèn)證的基礎(chǔ)接口定義,所有的認(rèn)證服務(wù)都需要實(shí)現(xiàn)該接口。一些典型的實(shí)現(xiàn)模塊包括:
- Krb5LoginModule 基于Kerberos的登錄/認(rèn)證服務(wù)模塊
- JndiLoginModule 基于用戶名和密碼的登錄/認(rèn)證服務(wù)模塊
- KeyStoreLoginModule 基于KeyStore的登錄/認(rèn)證服務(wù)模塊
LoginModule中涉及到兩個(gè)主要方法為login與commit:
-
login
對(duì)Subject進(jìn)行認(rèn)證。這個(gè)過(guò)程中主要涉及到用戶名和密碼信息提示,校驗(yàn)用戶密碼。認(rèn)證結(jié)果將會(huì)在LoginModule層面暫時(shí)保存。 -
commit
Commit過(guò)程首先確認(rèn)LoginModule中保存的認(rèn)證結(jié)果。認(rèn)證成功之后,Commit方法將Subject內(nèi)對(duì)應(yīng)的Principals以及Credentials關(guān)聯(lián)起來(lái)。如果Login方法認(rèn)證失敗的話,則該方法將會(huì)清理在LoginModule中保存的認(rèn)證結(jié)果信息。
5. 總結(jié)
本文主要介紹了JAAS中的三個(gè)基礎(chǔ)概念:
- Subject 描述要進(jìn)行認(rèn)證的對(duì)象實(shí)體/服務(wù),以及與之有關(guān)的安全信息。
- LoginContext 認(rèn)證上下文,提供了登錄/認(rèn)證相關(guān)的基礎(chǔ)方法。LoginContext的認(rèn)證由具體的LoginModule實(shí)現(xiàn)。
- LoginModule 認(rèn)證服務(wù)接口類,不同的認(rèn)證服務(wù)均需要實(shí)現(xiàn)該接口。
總結(jié)
以上是生活随笔為你收集整理的Java认证与授权服务JAAS基础概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Python数据结构】——二叉查找树(
- 下一篇: 集腋成裘-10-ECharts -未知-