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