|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
JAAS的核心類庫中文版
翻譯水平有限,輕點拍磚
===========================================
refference:http://java.sun.com/security/jaas/doc/api.html
可以將JAAS的類分為三個部分:認證和授權共有的類(Common Classes),認證部分的類(Authentication Classes),授權部分的類(Authorization Classes)。下面就分別介紹一下。
(一) Common Classes
這是認證和授權部分所共有的一些類的集合。核心類有:
1. Subject,是一個代表實體比如人或者服務的一系列信息的類,包含了實體的主特徵(Principals),公共憑證(public predentials),私有憑證(private predentials);
2. Principals,和Subject相結合,代表了Subject的身份,實現了java.security.Principal和java.io.Serializable接口。
3. Credentials,公共憑證和私有憑證都不是JAAS核心類庫的一部分,可以是任意的java類,開發人員可以開發自己的Credentials類,實現Refreshable和Destroyable接口。
1).Refreshable:提供給一個credential對像刷新能力的接口。比如說:一個credential對象可能有特殊的時間跨度的限制,通過刷新看其是否仍舊有效。該接口有兩個方法:isCurrent(),refresh()需要Credentials類實現。
2).Destroyable,該接口提供消毀credential對象的能力,清除該對象的信息。有兩個方法:isDestroyed(),destroy().
(二) Authentication Classes
認證身份是否合法時,通常要執行下面的幾步:
1. 應用初始化一個LoginContext實例;
2. LoginContext 咨詢Configuration獲得所有用於該應用的LoginModules;
3. 應用觸發LoginContext的login()方法;
4. Login方法觸發該應用的所有LoginModules。每個LoginModule都試圖去驗證Subject的身份。驗證成功,LoginModule將把相應的特徵(Principals)及憑證關聯到該Subject上;
5. LoginContext返回驗證的結果給應用;
6. 如果驗證成功,應用將從LoginContext得到驗證過了的Subject。
介紹Authentication的類庫:
1. LoginContext類,提供基本的方法來驗證Subjects的身份,並提供了把應用和下層的認證技術分開的方法。LoginContext在認證的時候向Configuration咨詢來確定所用的是那種認證服務,或者是哪個LoginModules,這樣不同的LoginModules可以堆疊在同一個應用中而不需要對應用進行任何的修改。
下面的代碼是如何驗證及註銷的:
// let the LoginContext instantiate a new Subject
LoginContext lc = new LoginContext("entryFoo");
try {
// authenticate the Subject
lc.login();
System.out.println("authentication successful");
// get the authenticated Subject
Subject subject = lc.getSubject();
...
// all finished -- logout
lc.logout();
} catch (LoginException le) {
System.out.println("authentication unsuccessful"+le.printStackTrace());
}
2. LoginModule接口,使開發者可以把不同的驗證技術堆疊在同一應用下。例如,一個LoginModule可以執行基於用戶名/密碼的表單形式的認證,另一種LoginModule可以基於硬件設備如智能卡等的驗證。
3. CallbackHandler接口,LoginModules利用CallbackHandler來和用戶交互得到用戶的驗證信息。LoginModules通過該接口得到用戶所輸入的信息,也可以提供給用戶諸如認證狀態的信息。應用可以定制CallbackHandler,例如,用戶可以通過圖形界面方式提示輸入用戶名,密碼,也可以僅僅通過命令行簡單的提示,可以看出LoginModules依舊獨立於和用戶交互的方式。
4. Callback接口,LoginModules可以傳一系列的Callback對像給Callbackhandler的handle()方法,詳細的信息請參考Callback API
(三) Authorization Classes
通過認證後,就會根據在一個JAAS Policy文件中設定好的規則進行訪問控制。
1. Policy類,是一個抽像類,代表了JAAS架構的訪問控制策略。默認情況下,提供了基於對文件級的訪問控制。Policy的子類必須實現一下兩個方法:
public abstract PermissionCollection getPermissions
(Subject subject,
CodeSource codesource);
public abstract void refresh();
getPermissions方法返回賦予制定Subject的權限。Refresh()方法不斷的更新不斷的根據策略進行調整。下面給出了一部分代碼來看看如何賦予用戶Subject權限。
// grant entry syntax for the default JAAS policy
grant CodeBase ["URL"],
Signedby ["signers"],
Principal [Principal_Class] ["Principal_Name"],
Principal ... {
permission Permission_Class ["Target_Name"]
[, "Permission_Actions"]
[, signedBy "SignerName"];
...
};
// example grant entry
grant CodeBase "http://foo.com",
Signedby "foo",
Principal com.sun.security.auth.NTPrincipal "admin" {
permission java.io.FilePermission "c:/user/admin", "read, write";
};
如果Policy中沒有指定Principal信息,將會拋出異常信息。CodeBase及Signedby部分是可選的。如果沒有出現,任意代碼將被匹配,任意的signer將被匹配。
在上面的例子中,grant entry規定了從http://foo.com下載的代碼,由foo簽名,由Windows NT的用戶admin運行,在目錄「c:/user/admin」中有讀寫的權限。多個Principals可在一個grant entry中列出來,並且以合集的形式起作用。
2. AuthPermission類,封裝了JAAS所要求的基本的permissions。一個AuthPermission對像包含了一個名字,但沒有列出行為。通過該類,要麼可以得到一個命名了的permission規則,要麼什麼也得不到。
3. PrivateCredentialPermiSSion類,對訪問Subject的私有憑證提供保護。
以上就是JAAS架構的核心類庫。 |
支持原創翻譯! |
| |